diff --git a/.circleci/config.yml b/.circleci/config.yml index d6b882790c..86ac0278ce 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,147 +1,163 @@ version: 2.1 -jobs: - build: - machine: - image: ubuntu-2204:current - resource_class: large - environment: - - TZ: "UTC" - +# Shared setup steps via CircleCI reusable command. +# Both jobs need their own Docker environment (CircleCI jobs can't share Docker). +commands: + setup_docker: steps: - checkout - - # Install Task + - run: name: Install Task command: | sudo sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin task --version - # Set up environment file - run: name: Setup environment command: | cp .env.example .env - - # Configure for Docker Compose setup sed -i 's/DB_HOST=.*$/DB_HOST=restarters_db/g' .env sed -i 's/DB_DATABASE=.*$/DB_DATABASE=restarters_db_test/g' .env sed -i 's/DB_USERNAME=.*$/DB_USERNAME=restarters/g' .env sed -i 's/DB_PASSWORD=.*$/DB_PASSWORD=s3cr3t/g' .env - - # Configure Discourse integration sed -i 's/FEATURE__DISCOURSE_INTEGRATION=.*$/FEATURE__DISCOURSE_INTEGRATION=true/g' .env sed -i 's/DISCOURSE_URL=.*$/DISCOURSE_URL=http:\/\/restarters_discourse/g' .env sed -i 's/DISCOURSE_APIKEY=.*$/DISCOURSE_APIKEY=fb71f38ca2b8b7cd6a041e57fd8202c9937088f0ecae7db40722bd758dda92fc/g' .env sed -i 's/DISCOURSE_APIUSER=.*$/DISCOURSE_APIUSER=someuser/g' .env - - # Configure for testing sed -i 's/APP_DEBUG=.*$/APP_DEBUG=false/g' .env sed -i 's/SESSION_DOMAIN=.*$/SESSION_DOMAIN=localhost/g' .env sed -i 's/HONEYPOT_DISABLE=.*$/HONEYPOT_DISABLE=TRUE/g' .env sed -i 's/APP_URL=.*$/APP_URL=http:\/\/localhost:8001/g' .env - - # Add environment variables from CircleCI echo "" >> .env echo "GOOGLE_API_CONSOLE_KEY=$GOOGLE_API_CONSOLE_KEY" >> .env echo "MAPBOX_TOKEN=$MAPBOX_TOKEN" >> .env - # Start Docker services using Task + - restore_cache: + keys: + - composer-v2-{{ checksum "composer.lock" }} + - composer-v2- + + - restore_cache: + keys: + - node-modules-v1-{{ checksum "package-lock.json" }} + - node-modules-v1- + + - run: + name: Build frontend assets + command: | + npm install --legacy-peer-deps + npm run build + no_output_timeout: 15m + + - save_cache: + key: node-modules-v1-{{ checksum "package-lock.json" }} + paths: + - node_modules + - run: name: Start Docker services command: | - # Set environment variable for CircleCI detection export CIRCLECI=true - # Enable Docker Compose bake for build optimization export COMPOSE_BAKE=true - # Start all services using Task task docker:up-all no_output_timeout: 10m - # Wait for services to be ready (includes build completion and restart detection) - run: name: Wait for services command: | task docker:wait-for-services-all - # Setup database and application + - save_cache: + key: composer-v2-{{ checksum "composer.lock" }} + paths: + - vendor + - run: name: Setup application command: | - # Grant timezone access - run directly on MySQL container docker exec restarters_db mysql -u root -ps3cr3t -e "GRANT SELECT ON mysql.time_zone_name TO 'restarters'@'%';" - - # Setup additional configuration needed for CI (most setup already done by docker_run.sh) - # Set MySQL function creators using session variable (compatible with MySQL 5.7) docker exec restarters_db mysql -u root -ps3cr3t -e "SET GLOBAL log_bin_trust_function_creators = 1;" - - # Disable ONLY_FULL_GROUP_BY for compatibility with getItemTypes() query docker exec restarters_db mysql -u root -ps3cr3t -e "SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));" - - # Generate additional Laravel artifacts for testing docker exec restarters php artisan l5-swagger:generate - # Setup Discourse API - run: name: Setup Discourse command: | - # Add API key to Discourse - run directly on PostgreSQL container docker exec postgresql psql -U postgres -c "INSERT INTO api_keys (id, user_id, created_by_id, created_at, updated_at, allowed_ips, hidden, last_used_at, revoked_at, description, key_hash, truncated_key) VALUES (1, NULL, 1, '2021-10-25 13:56:20.033338', '2021-10-25 13:56:20.033338', NULL, false, NULL, NULL, 'Restarters', 'd89e9dfacfb611fbaf004807648187ce7ed474df44dcb0ada230fab5c8dd6a5b', '9fd7');" bitnami_discourse - - # Configure Discourse settings docker exec restarters php artisan discourse:setting personal_message_enabled_groups 10 - # Run PHPUnit tests +jobs: + test-php: + machine: + image: ubuntu-2204:current + resource_class: large + environment: + - TZ: "UTC" + + steps: + - setup_docker + - run: name: Run PHPUnit tests command: | - # Run PHPUnit tests using Task for consistency with local development + mkdir -p /tmp/test-results/phpunit task docker:test:phpunit - # Copy test results to host docker cp restarters:/tmp/phpunit-results.xml /tmp/test-results/phpunit/results.xml no_output_timeout: 45m - # Run Jest tests - run: name: Run Jest tests command: | - # Run Jest tests using Task for consistency with local development + mkdir -p /tmp/test-results/jest task docker:test:jest - # Copy test results to host if they exist docker cp restarters:/tmp/test-results/junit.xml /tmp/test-results/jest/junit.xml || echo "Jest results not found, skipping" - # Run main Playwright tests (excluding autocomplete) + - store_artifacts: + path: /tmp/test-results + destination: test-results-php + + - store_test_results: + path: /tmp/test-results + + test-playwright: + machine: + image: ubuntu-2204:current + resource_class: large + environment: + - TZ: "UTC" + + steps: + - setup_docker + - run: name: Run main Playwright tests command: | - # Run Playwright tests using Task for consistency with local development + mkdir -p /tmp/test-results/playwright /tmp/test-results/logs + ( while true; do sleep 60; echo "[ci-keepalive] $(date -u +%H:%M:%S)"; done ) & + KEEPALIVE_PID=$! + trap "kill $KEEPALIVE_PID 2>/dev/null || true" EXIT task docker:test:playwright - no_output_timeout: 10m + EXIT_CODE=$? + kill $KEEPALIVE_PID 2>/dev/null || true + exit $EXIT_CODE + no_output_timeout: 30m - # Copy test results and artifacts - run: name: Copy Playwright artifacts command: | - # Create test results directory on host - mkdir -p /tmp/test-results/playwright - mkdir -p /tmp/test-results/logs - - # List what's available in the playwright container + mkdir -p /tmp/test-results/playwright /tmp/test-results/logs docker exec restarters_playwright bash -c "ls -la /tmp/test-results/* || echo 'No playwright directories found'" - - # Copy test results and artifacts from playwright container to host - docker cp restarters_playwright:/tmp/test-results/. /tmp/test-results/playwright/ || echo "Playwright HTML report not found" - - # Copy Vite log from restarters container for debugging + docker cp restarters_playwright:/tmp/test-results/. /tmp/test-results/playwright/ || echo "Playwright results not found" docker cp restarters:/tmp/vite.log /tmp/test-results/logs/vite.log || echo "Vite log not found" + docker logs restarters > /tmp/test-results/logs/restarters.log 2>&1 || echo "Could not capture restarters logs" + docker exec restarters bash -c "tail -300 /var/www/storage/logs/laravel.log 2>/dev/null" > /tmp/test-results/logs/laravel.log || echo "No laravel log found" when: always - # Store artifacts - store_artifacts: path: /tmp/test-results destination: playwright-test-results - + - store_test_results: path: /tmp/test-results @@ -182,13 +198,18 @@ jobs: workflows: build-and-deploy: jobs: - - build: + - test-php: + filters: + branches: + ignore: production + - test-playwright: filters: branches: ignore: production - deploy-fly-dev: requires: - - build + - test-php + - test-playwright filters: branches: only: develop diff --git a/Dockerfile b/Dockerfile index dae378e0f8..e4ac85f33d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # This is the docker for restarters. It's used from docker-compose. -FROM php:8.2-fpm +FROM php:8.4-fpm # Install dependencies RUN apt-get update && \ @@ -22,11 +22,15 @@ RUN npm install -g @playwright/test && \ npx playwright install-deps && \ npm uninstall -g @playwright/test -ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/download/2.7.31/install-php-extensions /usr/local/bin/ +ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/download/2.11.1/install-php-extensions /usr/local/bin/ + +# bcmath via PHP's own docker-php-ext-install — install-php-extensions +# trips over a pre-existing libbcmath/src/.libs directory in some PHP 8.4 +# base image variants ("mkdir: cannot create directory ...: File exists"). +RUN docker-php-ext-install bcmath RUN install-php-extensions \ pdo_mysql \ - bcmath \ zip \ xmlrpc \ xdebug \ diff --git a/Dockerfile.fly b/Dockerfile.fly index 4f2f2ff2b5..8d7941e9b5 100644 --- a/Dockerfile.fly +++ b/Dockerfile.fly @@ -1,7 +1,7 @@ # ============================================================================= # Stage 1: Build assets (Node + Composer) # ============================================================================= -FROM php:8.2-cli AS builder +FROM php:8.4-cli AS builder # Install system dependencies for building RUN apt-get update && apt-get install -y --no-install-recommends \ @@ -16,6 +16,7 @@ RUN pecl install channel://pecl.php.net/xmlrpc-1.0.0RC3 && docker-php-ext-enable # Install composer COPY --from=composer/composer:2-bin /composer /usr/bin/composer +ENV COMPOSER_ALLOW_SUPERUSER=1 # Install Node 18 RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ @@ -24,8 +25,9 @@ RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ WORKDIR /build -# Copy composer files first for layer caching +# Copy composer files and patches for layer caching COPY composer.json composer.lock ./ +COPY patches/ ./patches/ RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist # Copy package files for npm layer caching @@ -62,7 +64,7 @@ RUN rm -f .env # ============================================================================= # Stage 2: Production image (Nginx + PHP-FPM + Supervisord + Cron) # ============================================================================= -FROM php:8.2-fpm +FROM php:8.4-fpm # yesterday mode adds mariadb-server (co-located DB for restored snapshots). ARG STARTUP_SCRIPT=startup.sh diff --git a/Taskfile.yml b/Taskfile.yml index 772e1a3240..1338b264b9 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -225,7 +225,7 @@ tasks: else echo "Running on CircleCI - skipping database reset (handled by CI setup)" fi - - docker exec -e COVERALLS_REPO_TOKEN="$COVERALLS_REPO_TOKEN" restarters bash -c "export XDEBUG_MODE=coverage; ./vendor/bin/phpunit -d memory_limit=1024M --bootstrap vendor/autoload.php --coverage-clover tests/clover.xml --log-junit /tmp/phpunit-results.xml --configuration ./phpunit.xml --teamcity {{ .CLI_ARGS }}" + - docker exec -e COVERALLS_REPO_TOKEN="$COVERALLS_REPO_TOKEN" restarters bash -c "export XDEBUG_MODE=coverage; ./vendor/bin/phpunit -d memory_limit=1024M --bootstrap tests/bootstrap.php --coverage-clover tests/clover.xml --log-junit /tmp/phpunit-results.xml --configuration ./phpunit.xml --teamcity {{ .CLI_ARGS }}" - | if [ ! -z "$COVERALLS_REPO_TOKEN" ]; then echo "Uploading coverage to Coveralls..." @@ -264,13 +264,17 @@ tasks: # Create test data for group tags tests (NC user, host user, network, group) docker exec restarters php artisan tinker --execute='$nc = App\User::firstOrCreate(["email"=>"nc@test.net"], ["name"=>"NC User","password"=>Hash::make("passw0rd"),"consent_past_data"=>"2021-01-01","consent_future_data"=>"2021-01-01","consent_gdpr"=>"2021-01-01"]); $nc->role=6; $nc->save(); $host = App\User::firstOrCreate(["email"=>"host@test.net"], ["name"=>"Host User","password"=>Hash::make("passw0rd"),"consent_past_data"=>"2021-01-01","consent_future_data"=>"2021-01-01","consent_gdpr"=>"2021-01-01"]); $host->role=3; $host->save(); $network = App\Network::where("name","Test London")->first(); if (!$network) { $network = new App\Network(); $network->name="Test London"; $network->shortname="testlondon"; $network->description="Test network"; $network->default_language="en"; $network->save(); } DB::table("user_network")->insertOrIgnore(["user_id"=>$nc->id,"network_id"=>$network->id]); $group = App\Group::firstOrCreate(["name"=>"Tag Test Group"], ["website"=>"https://test.example.com","location"=>"London","area"=>"London","postcode"=>"SW1A 1AA","latitude"=>51.5,"longitude"=>-0.1,"free_text"=>"Test group","approved"=>true]); DB::table("group_network")->insertOrIgnore(["group_id"=>$group->idgroups,"network_id"=>$network->id]); DB::table("users_groups")->insertOrIgnore(["user"=>$host->id,"group"=>$group->idgroups,"role"=>3,"status"=>1]); echo "Group tags test data: NC=".$nc->id." Host=".$host->id." Network=".$network->id." Group=".$group->idgroups;' || true - docker exec restarters bash -c "sed -i 's/.throttle:api.,//g' /var/www/app/Http/Kernel.php" + - | + # Stop Vite dev server BEFORE modifying .env. + # Vite v4 crashes with ERR_INVALID_ARG_TYPE when it detects .env changes mid-run; + # killing it first prevents the crash from corrupting the build environment. + echo "Stopping Vite dev server..." + docker exec restarters bash -c "ps aux | grep 'node.*vite' | grep -v grep | awk '{print \$2}' | xargs -r kill -9 || true" - docker exec restarters bash -c "sed -i 's/APP_DEBUG=.*$/APP_DEBUG=false/g' /var/www/.env" - docker exec restarters bash -c "sed -i 's/QUEUE_CONNECTION=.*/QUEUE_CONNECTION=sync/g' /var/www/.env" - docker exec restarters bash -c "sed -i 's/MAIL_MAILER=.*/MAIL_MAILER=log/g' /var/www/.env" - | - # Stop Vite dev server and build assets for production - echo "Stopping Vite dev server and building assets..." - docker exec restarters bash -c "ps aux | grep 'node.*vite' | grep -v grep | awk '{print \$2}' | xargs -r kill || true" + echo "Building assets for production..." docker exec restarters bash -c "rm -f /var/www/public/hot && npm run build" - | # Ensure Playwright browsers are installed (handles version mismatches) @@ -281,11 +285,10 @@ tasks: export PLAYWRIGHT_TEST=true export PLAYWRIGHT_DEBUG=true export PWTEST_SKIP_TEST_OUTPUT=0 - export DEBUG=playwright export PLAYWRIGHT_BASE_URL=http://restarters_nginx export PW_TEST_HTML_REPORT_OPEN=never export FORCE_COLOR=1 - stdbuf -oL -eL npx playwright test --reporter=html + stdbuf -oL -eL npx playwright test --reporter=list,html " docker:wait-for-services-*: diff --git a/app/Device.php b/app/Device.php index 627cf20463..909f906f18 100644 --- a/app/Device.php +++ b/app/Device.php @@ -355,7 +355,11 @@ public function uWasteDiverted() { $wasteDiverted = 0; - if ($this->isFixed() && $this->deviceCategory->isUnpowered()) { + $unpowered = \Cache::remember('category-unpowered-' . $this->category, 60, function() { + return $this->deviceCategory->isUnpowered(); + }); + + if ($this->isFixed() && $unpowered) { if ($this->estimate > 0) { $wasteDiverted = $this->estimate; } else { diff --git a/app/Helpers/Fixometer.php b/app/Helpers/Fixometer.php index 755d7a63a0..11eec2706b 100644 --- a/app/Helpers/Fixometer.php +++ b/app/Helpers/Fixometer.php @@ -536,7 +536,8 @@ private static function isStatsValid($stats): bool return is_array($stats) && array_key_exists('partiesCount', $stats) && array_key_exists('waste_stats', $stats) - && is_array($stats['device_count_status'] ?? null); + && is_array($stats['device_count_status'] ?? null) + && is_array($stats['waste_stats'][0] ?? null); } public static function loginRegisterStats(): array @@ -554,6 +555,10 @@ public static function loginRegisterStats(): array \Cache::put('all_stats_fresh', true, self::STATS_FRESH_TTL); }); $stats = \Cache::get('all_stats'); + if (! static::isStatsValid($stats)) { + // Cache write failed (disk full, backend down) — compute uncached. + $stats = static::computeStats(); + } } elseif (\Cache::missing('all_stats_fresh')) { // Stale — serve immediately, dispatch one background refresh. if (\Cache::lock('all_stats_refreshing', self::STATS_FRESH_TTL)->get()) { @@ -567,11 +572,20 @@ public static function loginRegisterStats(): array public static function computeStats(): array { $device = new \App\Device; + $ws = \App\Helpers\LcaStats::getWasteStats()[0] ?? null; return [ 'partiesCount' => \App\Party::where('event_end_utc', '<', now())->count(), - 'waste_stats' => \App\Helpers\LcaStats::getWasteStats(), - 'device_count_status' => $device->statusCount(), + 'waste_stats' => [[ + 'powered_waste' => $ws->powered_waste ?? 0, + 'unpowered_waste' => $ws->unpowered_waste ?? 0, + 'powered_footprint' => $ws->powered_footprint ?? 0, + 'unpowered_footprint' => $ws->unpowered_footprint ?? 0, + ]], + 'device_count_status' => array_map( + static fn ($row) => ['status' => $row->status, 'counter' => $row->counter], + $device->statusCount() + ), ]; } @@ -579,16 +593,16 @@ private static function decorateStats(array $stats): array { $stats['deviceCount'] = 0; foreach ($stats['device_count_status'] as $statusRow) { - if ($statusRow->status == \App\Device::REPAIR_STATUS_FIXED) { - $stats['deviceCount'] = $statusRow->counter; + $row = (array) $statusRow; + if (($row['status'] ?? null) == \App\Device::REPAIR_STATUS_FIXED) { + $stats['deviceCount'] = $row['counter'] ?? 0; break; } } - $stats['co2Total'] = ($stats['waste_stats'][0]->powered_footprint ?? 0) - + ($stats['waste_stats'][0]->unpowered_footprint ?? 0); - $stats['wasteTotal'] = ($stats['waste_stats'][0]->powered_waste ?? 0) - + ($stats['waste_stats'][0]->unpowered_waste ?? 0); + $ws = $stats['waste_stats'][0] ?? []; + $stats['co2Total'] = ($ws['powered_footprint'] ?? 0) + ($ws['unpowered_footprint'] ?? 0); + $stats['wasteTotal'] = ($ws['powered_waste'] ?? 0) + ($ws['unpowered_waste'] ?? 0); return $stats; } diff --git a/app/Http/Controllers/API/EventController.php b/app/Http/Controllers/API/EventController.php index e6149be9fb..7d467a188a 100644 --- a/app/Http/Controllers/API/EventController.php +++ b/app/Http/Controllers/API/EventController.php @@ -244,8 +244,8 @@ public function listVolunteers(Request $request, $idevents): JsonResponse // Get the user that the API has been authenticated as. $user = auth('api')->user(); - // Emails are sensitive. - $showEmails = $user && !Fixometer::userHasEditPartyPermission($idevents, $user->id); + // Only show emails to users who have edit permission on this event. + $showEmails = $user && Fixometer::userHasEditPartyPermission($idevents, $user->id); $volunteers = $party->expandVolunteers($party->allConfirmedVolunteers()->get(), $showEmails); return response()->json([ diff --git a/app/Http/Controllers/API/GroupController.php b/app/Http/Controllers/API/GroupController.php index c4b5abfc21..9d4c726e02 100644 --- a/app/Http/Controllers/API/GroupController.php +++ b/app/Http/Controllers/API/GroupController.php @@ -244,6 +244,15 @@ public static function getGroupList(): JsonResponse * type="boolean" * ) * ), + * @OA\Parameter( + * name="includeNextEvent", + * description="Include the next event for the group. This makes the call slower. Default false.", + * required=false, + * in="query", + * @OA\Schema( + * type="boolean" + * ) + * ), * @OA\Response( * response=200, * description="Successful operation", @@ -251,12 +260,26 @@ public static function getGroupList(): JsonResponse * @OA\Property( * property="data", * title="data", - * description="An array of group names", + * description="An array of basic group info", * type="array", * @OA\Items( * type="object", * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="name", type="string", example="Group Name"), + * @OA\Property( + * property="lat", + * title="lat", + * description="Latitude of the group.", + * format="float", + * example="50.8113243" + * ), + * @OA\Property( + * property="lng", + * title="lng", + * description="Longitude of the group.", + * format="float", + * example="-1.0788839" + * ), * ) * ) * ) @@ -269,8 +292,8 @@ public static function listNamesv2(Request $request) { 'includeArchived' => ['string', 'in:true,false'], ]); - // We only return the group id and name, for speed. - $query = Group::select('idgroups', 'name', 'archived_at'); + // We only return a small number of attributes, for speed. + $query = Group::select('idgroups', 'name', 'latitude', 'longitude', 'archived_at'); if (!$request->has('includeArchived') || $request->get('includeArchived') == 'false') { $query = $query->whereNull('archived_at'); @@ -283,6 +306,8 @@ public static function listNamesv2(Request $request) { $ret[] = [ 'id' => $group->idgroups, 'name' => $group->name, + 'lat' => $group->latitude, + 'lng' => $group->longitude, 'archived_at' => $group->archived_at ? Carbon::parse($group->archived_at)->toIso8601String() : null ]; } @@ -292,6 +317,82 @@ public static function listNamesv2(Request $request) { ]; } + /** + * @OA\Get( + * path="/api/v2/groups/summary", + * operationId="getGroupSummariesv2", + * tags={"Groups"}, + * summary="Get list of groups with summary information", + * @OA\Parameter( + * name="archived", + * description="Include archived groups", + * required=false, + * in="path", + * @OA\Schema( + * type="boolean" + * ) + * ), + * @OA\Parameter( + * name="includeNextEvent", + * description="Include the next event for the group. This makes the call slower. Default false.", + * required=false, + * in="query", + * @OA\Schema( + * type="boolean" + * ) + * ), + * @OA\Parameter( + * name="includeCounts", + * description="Include the counts of hosts and restarters. This makes the call slower. Default false.", + * required=false, + * in="query", + * @OA\Schema( + * type="boolean" + * ) + * ), + * @OA\Parameter( + * name="includeCounts", + * description="Include impact stats. This makes the call slower. Default true.", + * required=false, + * in="query", + * @OA\Schema( + * type="boolean" + * ) + * ), + * @OA\Response( + * response=200, + * description="Successful operation", + * @OA\JsonContent( + * @OA\Property( + * property="data", + * title="data", + * description="An array of events", + * type="array", + * @OA\Items( + * @OA\Schema( + * ref="#/components/schemas/GroupSummary" + * ), + * ) + * ) + * ) + * ), + * ) + */ + + public static function listSummaryv2(Request $request) { + $request->validate([ + 'archived' => ['string', 'in:true,false'], + ]); + + $query = Group::all(); + + $groups = $query->all(); + + return [ + 'data' => \App\Http\Resources\GroupSummaryCollection::make($groups) + ]; + } + /** * @OA\Get( * path="/api/v2/groups/tags", diff --git a/app/Http/Controllers/API/UserController.php b/app/Http/Controllers/API/UserController.php index 7ba5a53b1f..769aeb51ff 100644 --- a/app/Http/Controllers/API/UserController.php +++ b/app/Http/Controllers/API/UserController.php @@ -73,6 +73,8 @@ protected static function mapUserAndAuditToUserChange($user, $audit) 'access_group_tag_id', 'mediawiki', 'wiki_sync_status', + 'latitude', + 'longitude', ]); $userChange = $user->toArray(); diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index b888f978b0..7e6f2e05da 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -178,7 +178,9 @@ public static function getUserInfo(): JsonResponse { $user = Auth::user(); - $user->makeHidden('api_token'); + // api_token and other credentials are in User::$hidden; makeHidden() is + // a belt-and-suspenders guard for any future $hidden regression. + $user->makeHidden(['api_token', 'calendar_hash', 'recovery', 'recovery_expires', 'mediawiki', 'latitude', 'longitude']); return response()->json($user->toArray()); } diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index 7ae9c17d39..7d742b4000 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -64,7 +64,7 @@ private function indexVariations($tab, $network) // Look for groups we have joined, not just been invited to. We have to explicitly test on deleted_at because // the normal filtering out of soft deletes won't happen for joins. - $your_groups =array_column(Group::with(['networks']) + $your_groups = array_column(Group::with(['networks']) ->join('users_groups', 'users_groups.group', '=', 'groups.idgroups') ->leftJoin('events', 'events.group', '=', 'groups.idgroups') ->where('users_groups.user', $user->id) @@ -75,13 +75,40 @@ private function indexVariations($tab, $network) ->get() ->toArray(), 'idgroups'); - // We pass a high limit to the groups nearby; there is a distance limit which will normally kick in first. - $groups_near_you = array_column($user->groupsNearby(1000), 'idgroups'); + $nearby_groups = []; + $min_lat = 90; + $max_lat = -90; + $min_lng = 180; + $max_lng = -180; + + if ($user->latitude || $user->longitude || $user->country_code) { + // We pass a high limit to the groups nearby; there is a distance limit which will normally kick in first. + $nearby_groups = $user->groupsNearby(1000); + + // Now find the lat/lng bounding box which contains these groups. + foreach ($nearby_groups as $group) { + if ($group->latitude < $min_lat) { + $min_lat = $group->latitude; + } + if ($group->latitude > $max_lat) { + $max_lat = $group->latitude; + } + if ($group->longitude < $min_lng) { + $min_lng = $group->longitude; + } + if ($group->longitude > $max_lng) { + $max_lng = $group->longitude; + } + } + } return view('group.index', [ - 'groups' => GroupController::expandGroups($groups, $your_groups, $groups_near_you), + 'your_groups' => $your_groups, + 'nearby_groups' => [ [ $min_lat, $min_lng ], [ $max_lat, $max_lng ] ], 'your_area' => $user->location, - 'tab' => $tab, + 'your_lat' => $user->latitude, + 'your_lng' => $user->longitude, + 'tab' => (!$tab || $tab === 'mine') ? 'mine' : 'other', 'network' => $network, 'networks' => $networks, 'all_group_tags' => $all_group_tags, @@ -481,7 +508,7 @@ public function delete($id): RedirectResponse } } - public static function expandGroups($groups, $your_groupids, $nearby_groupids) + public static function expandGroups($groups, $your_groupids) { $ret = []; $user = Auth::user(); @@ -534,7 +561,6 @@ public static function expandGroups($groups, $your_groupids, $nearby_groupids) ]; }), 'following' => in_array($group->idgroups, $your_groupids), - 'nearby' => in_array($group->idgroups, $nearby_groupids), 'archived_at' => $group->archived_at ? Carbon::parse($group->archived_at)->toIso8601String() : null ]; } diff --git a/app/Http/Controllers/NetworkController.php b/app/Http/Controllers/NetworkController.php index 7ab7323e6b..728b15826f 100644 --- a/app/Http/Controllers/NetworkController.php +++ b/app/Http/Controllers/NetworkController.php @@ -58,6 +58,30 @@ public function show(Network $network): View $groupsForAssociating = $network->groupsNotIn()->sortBy('name'); } + // Find the lat/lng bounding box for all groups in this network. + $minLat = $minLng = $maxLat = $maxLng = null; + + foreach ($network->groups as $group) { + $lat = $group->latitude; + $lng = $group->longitude; + + if (is_null($minLat) || $lat < $minLat) { + $minLat = $lat; + } + + if (is_null($minLng) || $lng < $minLng) { + $minLng = $lng; + } + + if (is_null($maxLat) || $lat > $maxLat) { + $maxLat = $lat; + } + + if (is_null($maxLng) || $lng > $maxLng) { + $maxLng = $lng; + } + } + // Get network stats $stats = $network->stats(); $stats['groups'] = $network->groups->count(); @@ -103,6 +127,10 @@ public function show(Network $network): View 'network' => $network, 'networkData' => $networkData, 'groupsForAssociating' => $groupsForAssociating, + 'mapBounds' => [ + [ $minLat, $minLng ], + [ $maxLat, $maxLng ], + ], 'stats' => $stats, 'tags' => $tags, 'canManageTags' => $canManageTags, diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 256ba9d7b2..e51e47f838 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -850,7 +850,7 @@ public function getRegister($hash = null) } $stats = Fixometer::loginRegisterStats(); - $deviceCount = array_key_exists(0, $stats['device_count_status']) ? $stats['device_count_status'][0]->counter : 0; + $deviceCount = array_key_exists(0, $stats['device_count_status']) ? ($stats['device_count_status'][0]['counter'] ?? 0) : 0; $activeRepairNetworkId = session()->get('repair_network'); $network = Network::find($activeRepairNetworkId); @@ -858,8 +858,8 @@ public function getRegister($hash = null) return view('auth.register-new', [ 'skills' => Fixometer::allSkills(), - 'co2Total' => $stats['waste_stats'][0]->powered_footprint + $stats['waste_stats'][0]->unpowered_footprint, - 'wasteTotal' => $stats['waste_stats'][0]->powered_waste + $stats['waste_stats'][0]->unpowered_waste, + 'co2Total' => ($stats['waste_stats'][0]['powered_footprint'] ?? 0) + ($stats['waste_stats'][0]['unpowered_footprint'] ?? 0), + 'wasteTotal' => ($stats['waste_stats'][0]['powered_waste'] ?? 0) + ($stats['waste_stats'][0]['unpowered_waste'] ?? 0), 'partiesCount' => $stats['partiesCount'], 'deviceCount' => $deviceCount, 'showNewsletterSignup' => $showNewsletterSignup, diff --git a/app/Http/Resources/Group.php b/app/Http/Resources/Group.php index 7066ae67fc..e1aaaee0ce 100644 --- a/app/Http/Resources/Group.php +++ b/app/Http/Resources/Group.php @@ -290,7 +290,7 @@ public function toArray(Request $request): array $ret = [ 'id' => $this->idgroups, 'name' => $this->name, - 'image' => $this->groupImage && is_object($this->groupImage) && is_object($this->groupImage->image) ? $this->groupImage->image->path : null, + 'image' => $this->image, 'website' => $this->website, 'phone' => $this->phone, 'description' => $this->free_text, diff --git a/app/Http/Resources/GroupSummary.php b/app/Http/Resources/GroupSummary.php index b4af5cf306..080b78e370 100644 --- a/app/Http/Resources/GroupSummary.php +++ b/app/Http/Resources/GroupSummary.php @@ -5,6 +5,7 @@ use Illuminate\Http\Request; use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; +use Cache; /** * @OA\Schema( @@ -63,6 +64,18 @@ * ref="#/components/schemas/EventSummary" * ), * @OA\Property( + * property="hosts", + * title="hosts", + * description="The number of hosts of this group (if requested via API call flag).", + * type="number", + * ), + * @OA\Property( + * property="restarters", + * title="hosts", + * description="The number of restarters in this group (if requested via API call flag).", + * type="number", + * ), + * @OA\Property( * property="summary", * title="summary", * description="Indicates that this is a summary result, not full group information.", @@ -88,7 +101,7 @@ public function toArray(Request $request): array $ret = [ 'id' => $this->idgroups, 'name' => $this->name, - 'image' => $this->groupImage && is_object($this->groupImage) && is_object($this->groupImage->image) ? $this->groupImage->image->path : null, + 'image' => $this->image, 'location' => new GroupLocation($this), 'networks' => new NetworkSummaryCollection($this->resource->networks), 'updated_at' => Carbon::parse($this->updated_at)->toIso8601String(), @@ -96,27 +109,53 @@ public function toArray(Request $request): array 'summary' => true ]; + if ($request->get('includeCounts', false)) { + $ret['hosts'] = $this->resource->all_confirmed_hosts_count; + $ret['restarters'] = $this->resource->all_confirmed_restarters_count; + } + if ($request->get('includeNextEvent', false)) { - // Get next approved event for group. - $nextevent = \App\Group::find($this->idgroups)->getNextUpcomingEvent(); + // Get next approved event for group. We cache all upcoming events to speed up the case where we + // are fetching many groups. + if (Cache::has('future_events')) { + $upcoming = Cache::get('future_events'); + } else { + $future = \App\Party::future()->get(); - if ($nextevent) { - // Using the resource for the nested event causes infinite loops. Just add the model attributes we - // need directly. - $ret['next_event'] = [ - 'id' => $nextevent->idevents, - 'start' => $nextevent->event_start_utc, - 'end' => $nextevent->event_end_utc, - 'timezone' => $nextevent->timezone, - 'title' => $nextevent->venue ?? $nextevent->location, - 'location' => $nextevent->location, - 'online' => $nextevent->online, - 'lat' => $nextevent->latitude, - 'lng' => $nextevent->longitude, - 'updated_at' => $nextevent->updated_at->toIso8601String(), - 'summary' => true - ]; + // Can't serialise the whole event, and we only need a few fields. + $upcoming = []; + + foreach ($future as $event) { + $upcoming[] = [ + 'id' => $event->idevents, + 'group_id' => $event->group, + 'start' => $event->event_start_utc, + 'end' => $event->event_end_utc, + 'timezone' => $event->timezone, + 'title' => $event->venue ?? $event->location, + 'location' => $event->location, + 'online' => $event->online, + 'lat' => $event->latitude, + 'lng' => $event->longitude, + 'updated_at' => $event->updated_at->toIso8601String(), + 'summary' => true + ]; + } + + Cache::put('future_events', $upcoming, 60); + } + + // Find the next event for this group. + $nextevent = null; + + foreach ($upcoming as $event) { + if ($event['group_id'] == $this->idgroups) { + $nextevent = $event; + break; + } } + + $ret['next_event'] = $nextevent; } return($ret); diff --git a/app/Party.php b/app/Party.php index a072be48f2..3d5b2f687d 100644 --- a/app/Party.php +++ b/app/Party.php @@ -816,21 +816,34 @@ public static function expandVolunteers($volunteers, $showEmails) { $volunteer['fullName'] = $volunteer->getFullName(); if ($volunteer->volunteer) { - $volunteer['volunteer'] = $volunteer->volunteer; + $user = $volunteer->volunteer; - if (!$showEmails) { - $volunteer['volunteer']['email'] = NULL; - } + $safeUser = [ + 'id' => $user->id, + 'name' => $user->name, + 'email' => $showEmails ? $user->email : null, + 'user_skills' => [], + ]; - if (! empty($volunteer->volunteer)) { - $volunteer['userSkills'] = $volunteer->volunteer->userSkills->all(); - $volunteer['profilePath'] = '/uploads/thumbnail_'.$volunteer->volunteer->getProfile($volunteer->volunteer->id)->path; + $volunteer['profilePath'] = '/uploads/thumbnail_'.$user->getProfile($user->id)->path; - foreach ($volunteer['userSkills'] as $skill) { - // Force expansion - $skill->skillName->skill_name; + foreach ($user->userSkills as $skill) { + // Guard against orphaned FK rows (deleted skill record). + if (!$skill->skillName) { + continue; } + // Emit only the shape the frontend expects: { skill_name: { skill_name: "…" } } + $safeUser['user_skills'][] = [ + 'skill_name' => ['skill_name' => $skill->skillName->skill_name], + ]; } + + // Unset the loaded relation before assigning the safe array. + // Eloquent's toArray() merges relationsToArray() LAST, so without this + // the full User model from the 'volunteer' HasOne would overwrite $safeUser + // when the blade calls json_encode($expanded_attended). + $volunteer->unsetRelation('volunteer'); + $volunteer['volunteer'] = $safeUser; } $ret[] = $volunteer; diff --git a/app/Support/SentryBeforeSend.php b/app/Support/SentryBeforeSend.php new file mode 100644 index 0000000000..ce75f02397 --- /dev/null +++ b/app/Support/SentryBeforeSend.php @@ -0,0 +1,19 @@ +exception !== null && str_contains($hint->exception->getMessage(), 'Could not reach the remote Mailgun server')) { + // Mailgun unreachable events are retried via queue, no need to log to Sentry. + return null; + } + + return $event; + } +} diff --git a/app/User.php b/app/User.php index 7a1464f2ad..ca17867880 100644 --- a/app/User.php +++ b/app/User.php @@ -54,6 +54,9 @@ class User extends Authenticatable implements Auditable, HasLocalePreference */ protected $hidden = [ 'password', 'remember_token', + // Credentials and PII that must never appear in serialised API responses or page HTML. + 'api_token', 'calendar_hash', 'recovery', 'recovery_expires', + 'mediawiki', 'latitude', 'longitude', ]; /** @@ -65,6 +68,13 @@ class User extends Authenticatable implements Auditable, HasLocalePreference 'number_of_logins', 'last_login_at', 'remember_token', + 'password', + 'api_token', + 'calendar_hash', + 'recovery', + 'recovery_expires', + 'latitude', + 'longitude', ]; /** @@ -130,30 +140,42 @@ public function groups(): BelongsToMany */ public function groupsNearby(int $numberOfGroups = 10, $createdSince = null, $nearby = self::NEARBY_KM) { - if (is_null($this->latitude) || is_null($this->longitude)) { - return []; - } + $groups = null; - $groupsNearbyQuery = Group::selectRaw( - '*, ( 6371 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) ) AS dist', - [$this->latitude, $this->longitude, $this->latitude] + if (!is_null($this->latitude) && !is_null($this->longitude)) { + $groupsNearbyQuery = Group::selectRaw( + '*, ( 6371 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) ) AS dist', + [$this->latitude, $this->longitude, $this->latitude] )->where(function ($q) { $q->whereNull('archived_at'); - // Only show approved groups. - $q->where('approved', true); - })->having('dist', '<=', $nearby) - ->groupBy('idgroups'); + // Only show approved groups. + $q->where('approved', true); + })->having('dist', '<=', $nearby) + ->groupBy('idgroups'); - if ($createdSince) { - $groupsNearbyQuery->whereDate('created_at', '>=', date('Y-m-d', strtotime($createdSince))); - } + if ($createdSince) { + $groupsNearbyQuery->whereDate('created_at', '>=', date('Y-m-d', strtotime($createdSince))); + } - $groups = $groupsNearbyQuery->orderBy('dist', 'ASC') - ->take($numberOfGroups) - ->get(); + $groups = $groupsNearbyQuery->orderBy('dist', 'ASC') + ->take($numberOfGroups) + ->get(); + $groups->load('groupImage.image'); + } else if ($this->country_code) { + // We have no city, but we do have a country. So all groups with this country code are nearby. + $groupsInCountry = Group::where('country_code', $this->country_code) + ->where('approved', true); + + if ($createdSince) { + $groupsInCountry->whereDate('created_at', '>=', date('Y-m-d', strtotime($createdSince))); + } - $groups->load('groupImage.image'); + $groups = $groupsInCountry + ->orderBy('name', 'ASC') + ->take($numberOfGroups) + ->get(); + } // Expand the image $groupsNearby = []; diff --git a/composer.json b/composer.json index 08ef157820..1c50f74aab 100644 --- a/composer.json +++ b/composer.json @@ -8,57 +8,53 @@ "license": "MIT", "type": "project", "require": { - "php": "^8.1", + "php": "^8.3", "addwiki/mediawiki-api": "^3.1.0", "addwiki/mediawiki-api-base": "^3.1.0", - "barryvdh/laravel-translation-manager": "^0.6.2", - "bkwld/croppa": "^6.0.1", + "barryvdh/laravel-translation-manager": "^0.6.9", "caseyamcl/guzzle_retry_middleware": "^2.6", "cweagans/composer-patches": "^1.7", "darkaonline/l5-swagger": "^8.3", "doctrine/dbal": "^3.5", - "egulias/email-validator": "^3.0.0", + "egulias/email-validator": "^4.0.0", "filp/whoops": "^2.14", "geocoder-php/mapbox-provider": "^1.4", "guzzlehttp/guzzle": "^7.2", "hieu-le/wordpress-xmlrpc-client": "~2.0", "intervention/image": "^2.7", "jenssegers/agent": "^2.6", - "laravel/framework": "^10.48", - "laravel/tinker": "^2.8", - "laravel/ui": "^4.2", - "laravelcollective/html": "^6.4", + "laravel/framework": "^13.0", + "laravel/tinker": "^3.0", + "laravel/ui": "^4.5", "league/csv": "^9.7", "league/flysystem-aws-s3-v3": "^3.0", - "mariuzzo/laravel-js-localization": "^1.10", + "mariuzzo/laravel-js-localization": "^2.0", "mcamara/laravel-localization": "^2.3.0", - "msurguy/honeypot": "^1.2", - "owen-it/laravel-auditing": "^13.1", + "msurguy/honeypot": "^1.5", + "owen-it/laravel-auditing": "^14.0", "predis/predis": "^2.0", - "rennokki/laravel-eloquent-query-cache": "^3.4", - "sentry/sentry-laravel": "^3.2", + "rennokki/laravel-eloquent-query-cache": "^3.6.2", + "sentry/sentry-laravel": "^4.0", "soundasleep/html2text": "^1.1", "spatie/calendar-links": "^1.6", - "spatie/laravel-validation-rules": "^3.4", + "spatie/laravel-validation-rules": "^3.4.4", "spinen/laravel-discourse-sso": "^2.8", - "symfony/http-client": "^6.2", - "symfony/http-foundation": "^6.2", - "symfony/mailgun-mailer": "^6.2", - "toin0u/geocoder-laravel": "^4.6", - "twbs/bootstrap": "4.1.0", + "symfony/http-client": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/mailgun-mailer": "^7.0", + "symfony/psr-http-message-bridge": "^7.0", + "toin0u/geocoder-laravel": "^13.0", "wouternl/laravel-drip": "dev-master" }, "require-dev": { - "barryvdh/laravel-debugbar": "^3.8", + "barryvdh/laravel-debugbar": "^4.0", "fakerphp/faker": "^1.20.0", - "laravel/dusk": "^7.4", - "mockery/mockery": "^1.4.4", - "nunomaduro/collision": "^6.3", - "osteel/openapi-httpfoundation-testing": "^0.8.0", - "phpunit/phpunit": "^9.5.10", - "spatie/laravel-ignition": "^2.0", + "laravel/dusk": "^8.0", + "mockery/mockery": "^1.6", + "phpunit/phpunit": "^10.5", + "spatie/laravel-ignition": "^2.8", "squizlabs/php_codesniffer": "^3.6", - "symfony/dom-crawler": "^6.2" + "symfony/dom-crawler": "^7.0" }, "autoload": { "files": [ @@ -112,6 +108,14 @@ "laravel-drip": { "type": "vcs", "url": "https://github.com/TheRestartProject/laravel-drip" + }, + "laravel-discourse-sso": { + "type": "vcs", + "url": "https://github.com/edwh/laravel-discourse-sso" + }, + "laravel-eloquent-query-cache": { + "type": "vcs", + "url": "https://github.com/edwh/laravel-eloquent-query-cache" } } } diff --git a/composer.lock b/composer.lock index 1903d38c14..4ce17b7426 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": "bc96c0e7ddaad3d938052527512d5360", + "content-hash": "a3582b3397fa2df20e1726678124f233", "packages": [ { "name": "addwiki/mediawiki-api", @@ -328,26 +328,26 @@ }, { "name": "barryvdh/laravel-translation-manager", - "version": "v0.6.8", + "version": "v0.6.9", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-translation-manager.git", - "reference": "fe182d8b6e994ef92ff816c926d2c8c875bcb12d" + "reference": "f1c1d954684ea2cb6843a710d3bcfe789c101de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-translation-manager/zipball/fe182d8b6e994ef92ff816c926d2c8c875bcb12d", - "reference": "fe182d8b6e994ef92ff816c926d2c8c875bcb12d", + "url": "https://api.github.com/repos/barryvdh/laravel-translation-manager/zipball/f1c1d954684ea2cb6843a710d3bcfe789c101de2", + "reference": "f1c1d954684ea2cb6843a710d3bcfe789c101de2", "shasum": "" }, "require": { - "illuminate/support": "^9|^10|^11|^12", - "illuminate/translation": "^9|^10|^11|^12", + "illuminate/support": "^9|^10|^11|^12|^13", + "illuminate/translation": "^9|^10|^11|^12|^13", "php": "^8.1", "symfony/finder": "^6|^7" }, "require-dev": { - "orchestra/testbench": "^7|^8|^9|^10" + "orchestra/testbench": "^7|^8|^9|^10|^11" }, "suggest": { "tanmuhittin/laravel-google-translate": "If you want to translate using Google API" @@ -386,107 +386,31 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-translation-manager/issues", - "source": "https://github.com/barryvdh/laravel-translation-manager/tree/v0.6.8" + "source": "https://github.com/barryvdh/laravel-translation-manager/tree/v0.6.9" }, - "time": "2025-06-07T14:31:37+00:00" - }, - { - "name": "bkwld/croppa", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/BKWLD/croppa.git", - "reference": "ade55922a77817972df82f2f00be647ae6ffcbae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/BKWLD/croppa/zipball/ade55922a77817972df82f2f00be647ae6ffcbae", - "reference": "ade55922a77817972df82f2f00be647ae6ffcbae", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "illuminate/console": "^9.0|^10.0", - "illuminate/routing": "^9.0|^10.0", - "illuminate/support": "^9.0|^10.0", - "intervention/image": "^2.7", - "league/flysystem": "^3.0", - "php": "^8.0.2", - "symfony/http-foundation": "^6.0", - "symfony/http-kernel": "^6.0" - }, - "require-dev": { - "mockery/mockery": "^1.4.4", - "nunomaduro/larastan": "^2.0", - "orchestra/testbench": "^7.5", - "phpunit/phpunit": "^9.5.10" - }, - "suggest": { - "ext-exif": "Required if you want to have Croppa auto-rotate images from devices like mobile phones based on exif meta data." - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Croppa": "Bkwld\\Croppa\\Facades\\Croppa" - }, - "providers": [ - "Bkwld\\Croppa\\CroppaServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Bkwld\\Croppa\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Robert Reinhard" - }, - { - "name": "Samuel De Backer" - } - ], - "description": "Image thumbnail creation through specially formatted URLs for Laravel", - "homepage": "https://github.com/bkwld/croppa", - "keywords": [ - "image", - "laravel", - "resize", - "thumb" - ], - "support": { - "issues": "https://github.com/BKWLD/croppa/issues", - "source": "https://github.com/BKWLD/croppa/tree/6.0.2" - }, - "time": "2023-03-20T19:02:41+00:00" + "time": "2026-03-19T12:02:08+00:00" }, { "name": "brick/math", - "version": "0.12.3", + "version": "0.14.8", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629", + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -516,7 +440,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.3" + "source": "https://github.com/brick/math/tree/0.14.8" }, "funding": [ { @@ -524,7 +448,7 @@ "type": "github" } ], - "time": "2025-02-28T13:11:00+00:00" + "time": "2026-02-10T14:33:43+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -668,72 +592,6 @@ ], "time": "2025-07-11T12:33:22+00:00" }, - { - "name": "clue/stream-filter", - "version": "v1.7.0", - "source": { - "type": "git", - "url": "https://github.com/clue/stream-filter.git", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "Clue\\StreamFilter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/stream-filter", - "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" - ], - "support": { - "issues": "https://github.com/clue/stream-filter/issues", - "source": "https://github.com/clue/stream-filter/tree/v1.7.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2023-12-20T15:40:13+00:00" - }, { "name": "cviebrock/discourse-php", "version": "0.9.3", @@ -1060,6 +918,7 @@ "issues": "https://github.com/doctrine/annotations/issues", "source": "https://github.com/doctrine/annotations/tree/2.0.2" }, + "abandoned": true, "time": "2024-09-05T10:17:24+00:00" }, { @@ -1178,29 +1037,29 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -1220,9 +1079,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "doctrine/event-manager", @@ -1407,28 +1266,27 @@ }, { "name": "doctrine/lexer", - "version": "2.1.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.21" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -1465,7 +1323,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -1481,33 +1339,32 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:35:39+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8c784d071debd117328803d86b2097615b457500" + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", - "reference": "8c784d071debd117328803d86b2097615b457500", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" + "php": "^8.2|^8.3|^8.4|^8.5" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" }, "type": "library", "extra": { @@ -1538,7 +1395,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" }, "funding": [ { @@ -1546,30 +1403,30 @@ "type": "github" } ], - "time": "2024-10-09T13:47:03+00:00" + "time": "2025-10-31T18:51:33+00:00" }, { "name": "egulias/email-validator", - "version": "3.2.6", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", - "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2|^2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1577,7 +1434,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1605,7 +1462,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.6" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -1613,7 +1470,7 @@ "type": "github" } ], - "time": "2023-06-01T07:04:22+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "filp/whoops", @@ -1688,31 +1545,31 @@ }, { "name": "fruitcake/php-cors", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", "shasum": "" }, "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" }, "require-dev": { - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^2", "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -1743,7 +1600,7 @@ ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" }, "funding": [ { @@ -1755,7 +1612,7 @@ "type": "github" } ], - "time": "2023-10-12T05:21:21+00:00" + "time": "2025-12-03T09:33:47+00:00" }, { "name": "geocoder-php/chain-provider", @@ -2055,24 +1912,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.3", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" + "phpoption/phpoption": "^1.9.5" }, "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" }, "type": "library", "autoload": { @@ -2101,7 +1958,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" }, "funding": [ { @@ -2113,7 +1970,7 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:45:45+00:00" + "time": "2025-12-27T19:43:20+00:00" }, { "name": "guzzlehttp/guzzle", @@ -2199,7 +2056,7 @@ "homepage": "https://github.com/Nyholm" }, { - "name": "Márk Sági-Kazár", + "name": "M\u00e1rk S\u00e1gi-Kaz\u00e1r", "email": "mark.sagikazar@gmail.com", "homepage": "https://github.com/sagikazarmark" }, @@ -2322,16 +2179,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.8.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "21dc724a0583619cd1652f673303492272778051" + "reference": "d5ddaf5743c42a61cb6100f83dc9d5a2bafe75ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", - "reference": "21dc724a0583619cd1652f673303492272778051", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/d5ddaf5743c42a61cb6100f83dc9d5a2bafe75ca", + "reference": "d5ddaf5743c42a61cb6100f83dc9d5a2bafe75ca", "shasum": "" }, "require": { @@ -2346,8 +2203,9 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2390,7 +2248,7 @@ "homepage": "https://github.com/Nyholm" }, { - "name": "Márk Sági-Kazár", + "name": "M\u00e1rk S\u00e1gi-Kaz\u00e1r", "email": "mark.sagikazar@gmail.com", "homepage": "https://github.com/sagikazarmark" }, @@ -2400,7 +2258,7 @@ "homepage": "https://github.com/Tobion" }, { - "name": "Márk Sági-Kazár", + "name": "M\u00e1rk S\u00e1gi-Kaz\u00e1r", "email": "mark.sagikazar@gmail.com", "homepage": "https://sagikazarmark.hu" } @@ -2418,7 +2276,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.8.0" + "source": "https://github.com/guzzle/psr7/tree/2.10.0" }, "funding": [ { @@ -2434,7 +2292,7 @@ "type": "tidelift" } ], - "time": "2025-08-23T21:21:41+00:00" + "time": "2026-05-19T17:32:11+00:00" }, { "name": "guzzlehttp/uri-template", @@ -2581,16 +2439,16 @@ }, { "name": "http-interop/http-factory-guzzle", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/http-interop/http-factory-guzzle.git", - "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" + "reference": "c2c859ceb05c3f42e710b60555f4c35b6a4a3995" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", - "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/c2c859ceb05c3f42e710b60555f4c35b6a4a3995", + "reference": "c2c859ceb05c3f42e710b60555f4c35b6a4a3995", "shasum": "" }, "require": { @@ -2633,9 +2491,9 @@ ], "support": { "issues": "https://github.com/http-interop/http-factory-guzzle/issues", - "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.1" }, - "time": "2021-07-21T13:50:14+00:00" + "time": "2025-12-15T11:28:16+00:00" }, { "name": "igorw/get-in", @@ -2967,24 +2825,24 @@ }, { "name": "laravel/framework", - "version": "v10.48.29", + "version": "v13.1.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47" + "reference": "5525d87797815c55f7a89d0dfc1dd89e9de98b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/8f7f9247cb8aad1a769d6b9815a6623d89b46b47", - "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47", + "url": "https://api.github.com/repos/laravel/framework/zipball/5525d87797815c55f7a89d0dfc1dd89e9de98b63", + "reference": "5525d87797815c55f7a89d0dfc1dd89e9de98b63", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", - "egulias/email-validator": "^3.2.1|^4.0", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^4.0", "ext-ctype": "*", "ext-filter": "*", "ext-hash": "*", @@ -2992,45 +2850,47 @@ "ext-openssl": "*", "ext-session": "*", "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.9", - "laravel/serializable-closure": "^1.3", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", + "laravel/prompts": "^0.3.0", + "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", - "nesbot/carbon": "^2.67", - "nunomaduro/termwind": "^1.13", - "php": "^8.1", - "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", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^6.2", - "symfony/error-handler": "^6.2", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.4", - "symfony/http-kernel": "^6.2", - "symfony/mailer": "^6.2", - "symfony/mime": "^6.2", - "symfony/process": "^6.2", - "symfony/routing": "^6.2", - "symfony/uid": "^6.2", - "symfony/var-dumper": "^6.2", + "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.33", + "symfony/polyfill-php85": "^1.33", + "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.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { - "carbonphp/carbon-doctrine-types": ">=3.0", - "doctrine/dbal": ">=4.0", - "mockery/mockery": "1.6.8", - "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.1|2.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", @@ -3038,6 +2898,7 @@ "illuminate/bus": "self.version", "illuminate/cache": "self.version", "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", @@ -3050,6 +2911,7 @@ "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", "illuminate/log": "self.version", "illuminate/macroable": "self.version", "illuminate/mail": "self.version", @@ -3059,42 +2921,47 @@ "illuminate/process": "self.version", "illuminate/queue": "self.version", "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^3.5.1", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", - "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.23.4", - "pda/pheanstalk": "^4.0", - "phpstan/phpstan": "~1.11.11", - "phpunit/phpunit": "^10.0.7", - "predis/predis": "^2.0.2", - "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4", - "symfony/psr-http-message-bridge": "^2.0" + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^11.0.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0" }, "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.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "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).", "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.", @@ -3103,42 +2970,46 @@ "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).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "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).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", - "predis/predis": "Required to use the predis connector (^2.0.2).", + "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).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "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 (^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 (^11.5.50 || ^12.5.8 || ^13.0.3).", + "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).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.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.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/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)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "13.0.x-dev" } }, "autoload": { "files": [ + "src/Illuminate/Collections/functions.php", "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", + "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { @@ -3146,7 +3017,8 @@ "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" ] } }, @@ -3170,37 +3042,38 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-03-12T14:42:01+00:00" + "time": "2026-03-18T17:10:25+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.25", + "version": "v0.3.18", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a19af51bb144bf87f08397921fa619f85c7d4e72", + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72", "shasum": "" }, "require": { + "composer-runtime-api": "^2.2", "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", "php": "^8.1", - "symfony/console": "^6.2|^7.0" + "symfony/console": "^6.2|^7.0|^8.0" }, "conflict": { "illuminate/console": ">=10.17.0 <10.25.0", "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -3208,7 +3081,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.1.x-dev" + "dev-main": "0.3.x-dev" } }, "autoload": { @@ -3226,38 +3099,38 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" + "source": "https://github.com/laravel/prompts/tree/v0.3.18" }, - "time": "2024-08-12T22:06:33+00:00" + "time": "2026-05-19T00:47:18+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.7", + "version": "v2.0.13", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", - "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.1" }, "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -3289,37 +3162,37 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-11-14T18:34:49+00:00" + "time": "2026-04-16T14:03:50+00:00" }, { "name": "laravel/tinker", - "version": "v2.10.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" + "reference": "4faba77764bd33411735936acdf30446d058c78b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", + "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", + "reference": "4faba77764bd33411735936acdf30446d058c78b", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "psy/psysh": "^0.12.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + "phpunit/phpunit": "^10.5|^11.5" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." }, "type": "library", "extra": { @@ -3327,6 +3200,9 @@ "providers": [ "Laravel\\Tinker\\TinkerServiceProvider" ] + }, + "branch-alias": { + "dev-master": "3.x-dev" } }, "autoload": { @@ -3353,35 +3229,35 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.1" + "source": "https://github.com/laravel/tinker/tree/v3.0.2" }, - "time": "2025-01-27T14:24:01+00:00" + "time": "2026-03-17T14:54:13+00:00" }, { "name": "laravel/ui", - "version": "v4.6.1", + "version": "v4.6.3", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88" + "reference": "ff27db15416c1ed8ad9848f5692e47595dd5de27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", - "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", + "url": "https://api.github.com/repos/laravel/ui/zipball/ff27db15416c1ed8ad9848f5692e47595dd5de27", + "reference": "ff27db15416c1ed8ad9848f5692e47595dd5de27", "shasum": "" }, "require": { - "illuminate/console": "^9.21|^10.0|^11.0|^12.0", - "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0", - "illuminate/support": "^9.21|^10.0|^11.0|^12.0", - "illuminate/validation": "^9.21|^10.0|^11.0|^12.0", + "illuminate/console": "^9.21|^10.0|^11.0|^12.0|^13.0", + "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0|^13.0", + "illuminate/validation": "^9.21|^10.0|^11.0|^12.0|^13.0", "php": "^8.0", - "symfony/console": "^6.0|^7.0" + "symfony/console": "^6.0|^7.0|^8.0" }, "require-dev": { - "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0", - "phpunit/phpunit": "^9.3|^10.4|^11.5" + "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0|^11.0", + "phpunit/phpunit": "^9.3|^10.4|^11.5|^12.5|^13.0" }, "type": "library", "extra": { @@ -3416,95 +3292,22 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v4.6.1" + "source": "https://github.com/laravel/ui/tree/v4.6.3" }, - "time": "2025-01-28T15:15:29+00:00" - }, - { - "name": "laravelcollective/html", - "version": "v6.4.1", - "source": { - "type": "git", - "url": "https://github.com/LaravelCollective/html.git", - "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/64ddfdcaeeb8d332bd98bef442bef81e39c3910b", - "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b", - "shasum": "" - }, - "require": { - "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/routing": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/session": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/view": "^6.0|^7.0|^8.0|^9.0|^10.0", - "php": ">=7.2.5" - }, - "require-dev": { - "illuminate/database": "^6.0|^7.0|^8.0|^9.0|^10.0", - "mockery/mockery": "~1.0", - "phpunit/phpunit": "~8.5|^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.x-dev" - }, - "laravel": { - "providers": [ - "Collective\\Html\\HtmlServiceProvider" - ], - "aliases": { - "Form": "Collective\\Html\\FormFacade", - "Html": "Collective\\Html\\HtmlFacade" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Collective\\Html\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adam Engebretson", - "email": "adam@laravelcollective.com" - }, - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - } - ], - "description": "HTML and Form Builders for the Laravel Framework", - "homepage": "https://laravelcollective.com", - "support": { - "issues": "https://github.com/LaravelCollective/html/issues", - "source": "https://github.com/LaravelCollective/html" - }, - "abandoned": "spatie/laravel-html", - "time": "2023-04-25T02:46:11+00:00" + "time": "2026-03-17T13:41:52+00:00" }, { "name": "league/commonmark", - "version": "2.7.1", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "10732241927d3971d28e7ea7b5712721fa2296ca" + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca", - "reference": "10732241927d3971d28e7ea7b5712721fa2296ca", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", "shasum": "" }, "require": { @@ -3529,9 +3332,9 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 | ^7.0", - "symfony/process": "^5.4 | ^6.0 | ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" }, @@ -3541,7 +3344,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.8-dev" + "dev-main": "2.9-dev" } }, "autoload": { @@ -3598,7 +3401,7 @@ "type": "tidelift" } ], - "time": "2025-07-20T12:47:49+00:00" + "time": "2026-03-19T13:16:38+00:00" }, { "name": "league/config", @@ -3684,16 +3487,16 @@ }, { "name": "league/csv", - "version": "9.24.1", + "version": "9.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8" + "reference": "6582ace29ae09ba5b07049d40ea13eb19c8b5073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/e0221a3f16aa2a823047d59fab5809d552e29bc8", - "reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/6582ace29ae09ba5b07049d40ea13eb19c8b5073", + "reference": "6582ace29ae09ba5b07049d40ea13eb19c8b5073", "shasum": "" }, "require": { @@ -3703,14 +3506,14 @@ "require-dev": { "ext-dom": "*", "ext-xdebug": "*", - "friendsofphp/php-cs-fixer": "^3.75.0", - "phpbench/phpbench": "^1.4.1", - "phpstan/phpstan": "^1.12.27", + "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", - "symfony/var-dumper": "^6.4.8 || ^7.3.0" + "phpunit/phpunit": "^10.5.16 || ^11.5.22 || ^12.5.4", + "symfony/var-dumper": "^6.4.8 || ^7.4.0 || ^8.0" }, "suggest": { "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", @@ -3771,20 +3574,20 @@ "type": "github" } ], - "time": "2025-06-25T14:53:51+00:00" + "time": "2025-12-27T15:18:42+00:00" }, { "name": "league/flysystem", - "version": "3.30.0", + "version": "3.34.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e" + "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e", + "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e", "shasum": "" }, "require": { @@ -3852,22 +3655,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.34.0" }, - "time": "2025-06-25T13:29:59+00:00" + "time": "2026-05-14T10:28:08+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.29.0", + "version": "3.32.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" + "reference": "a1979df7c9784d334ea6df356aed3d18ac6673d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/a1979df7c9784d334ea6df356aed3d18ac6673d0", + "reference": "a1979df7c9784d334ea6df356aed3d18ac6673d0", "shasum": "" }, "require": { @@ -3907,22 +3710,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.32.0" }, - "time": "2024-08-17T13:10:48+00:00" + "time": "2026-02-25T16:46:44+00:00" }, { "name": "league/flysystem-local", - "version": "3.30.0", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", "shasum": "" }, "require": { @@ -3956,9 +3759,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" }, - "time": "2025-05-21T10:34:19+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/mime-type-detection", @@ -4017,41 +3820,50 @@ "time": "2024-09-21T08:32:55+00:00" }, { - "name": "mariuzzo/laravel-js-localization", - "version": "v1.11.2", + "name": "league/uri", + "version": "7.8.1", "source": { "type": "git", - "url": "https://github.com/rmariuzzo/Laravel-JS-Localization.git", - "reference": "1ea310be42d3a4f09c38a0d97b8d5bd4683c7026" + "url": "https://github.com/thephpleague/uri.git", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rmariuzzo/Laravel-JS-Localization/zipball/1ea310be42d3a4f09c38a0d97b8d5bd4683c7026", - "reference": "1ea310be42d3a4f09c38a0d97b8d5bd4683c7026", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", "shasum": "" }, "require": { - "illuminate/config": "^4.2 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0", - "illuminate/console": "^4.2 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0", - "illuminate/filesystem": "^4.2 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0", - "php": "^5.4 || ^7.0 || ^8.0", - "tedivm/jshrink": "~1.0" + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" }, - "require-dev": { - "orchestra/testbench": "^2.2 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0" + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Mariuzzo\\LaravelJsLocalization\\LaravelJsLocalizationServiceProvider" - ] + "branch-alias": { + "dev-master": "7.x-dev" } }, "autoload": { "psr-4": { - "Mariuzzo\\LaravelJsLocalization\\": "src/Mariuzzo/LaravelJsLocalization/" + "League\\Uri\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -4060,76 +3872,250 @@ ], "authors": [ { - "name": "Rubens Mariuzzo", - "email": "rubens@mariuzzo.com", - "homepage": "https://github.com/rmariuzzo", - "role": "Developer" - }, - { - "name": "German Popoter", - "email": "me@gpopoteur.com", - "homepage": "https://github.com/gpopoteur", - "role": "Developer" - }, - { - "name": "Galievskiy Dmitriy", - "homepage": "https://github.com/xAockd", - "role": "Developer" - }, - { - "name": "Ramon Ackermann", - "homepage": "https://github.com/sboo", - "role": "Developer" - }, - { - "name": "Anton Komarev", - "homepage": "https://github.com/antonkomarev", - "role": "Developer" - }, - { - "name": "Pascal Baljet", - "homepage": "https://github.com/pascalbaljetmedia", - "role": "Developer" + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" } ], - "description": "Laravel Localization in JavaScript", - "homepage": "https://github.com/rmariuzzo/laravel-js-localization", + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", "keywords": [ - "JS", - "i18n", - "javascript", - "lang", - "laravel", - "laravel 5", - "localization" + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" ], "support": { - "issues": "https://github.com/rmariuzzo/laravel-js-localization/issues", - "source": "https://github.com/rmariuzzo/laravel-js-localization" + "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.8.1" }, - "time": "2024-12-24T15:43:00+00:00" - }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "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.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-08T20:05:35+00:00" + }, + { + "name": "mariuzzo/laravel-js-localization", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/rmariuzzo/Laravel-JS-Localization.git", + "reference": "1bbb5849a97d4ab244f25f17dfacc3f3e9a91fe4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rmariuzzo/Laravel-JS-Localization/zipball/1bbb5849a97d4ab244f25f17dfacc3f3e9a91fe4", + "reference": "1bbb5849a97d4ab244f25f17dfacc3f3e9a91fe4", + "shasum": "" + }, + "require": { + "illuminate/config": "^11.0|^12.0|^13.0", + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/filesystem": "^11.0|^12.0|^13.0", + "php": "^8.2", + "tedivm/jshrink": "~1.0" + }, + "require-dev": { + "orchestra/testbench": "^9.0|^10.0|^11.0", + "pestphp/pest": "^3.7|^4.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Mariuzzo\\LaravelJsLocalization\\LaravelJsLocalizationServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Mariuzzo\\LaravelJsLocalization\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rubens Mariuzzo", + "email": "rubens@mariuzzo.com", + "homepage": "https://github.com/rmariuzzo", + "role": "Developer" + }, + { + "name": "German Popoter", + "email": "me@gpopoteur.com", + "homepage": "https://github.com/gpopoteur", + "role": "Developer" + }, + { + "name": "Galievskiy Dmitriy", + "homepage": "https://github.com/xAockd", + "role": "Developer" + }, + { + "name": "Ramon Ackermann", + "homepage": "https://github.com/sboo", + "role": "Developer" + }, + { + "name": "Anton Komarev", + "homepage": "https://github.com/antonkomarev", + "role": "Developer" + }, + { + "name": "Pascal Baljet", + "homepage": "https://github.com/pascalbaljetmedia", + "role": "Developer" + } + ], + "description": "Laravel Localization in JavaScript", + "homepage": "https://github.com/rmariuzzo/laravel-js-localization", + "keywords": [ + "JS", + "i18n", + "javascript", + "lang", + "laravel", + "laravel 12", + "laravel 13", + "localization" + ], + "support": { + "issues": "https://github.com/rmariuzzo/laravel-js-localization/issues", + "source": "https://github.com/rmariuzzo/laravel-js-localization" + }, + "time": "2026-03-26T03:51:50+00:00" + }, { "name": "mcamara/laravel-localization", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/mcamara/laravel-localization.git", - "reference": "af91f489f518fb1907944de8622a19266159d28f" + "reference": "b4b530b8d892cc8787b94059085a53b37224009b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/af91f489f518fb1907944de8622a19266159d28f", - "reference": "af91f489f518fb1907944de8622a19266159d28f", + "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/b4b530b8d892cc8787b94059085a53b37224009b", + "reference": "b4b530b8d892cc8787b94059085a53b37224009b", "shasum": "" }, "require": { - "laravel/framework": "^10.0|^11.0|^12.0", + "laravel/framework": "^11.0|^12.0|^13.0", "php": "^8.2" }, "require-dev": { - "orchestra/testbench-browser-kit": "^8.5|^9.0|^10.0", - "phpunit/phpunit": "^10.1|^11.0" + "orchestra/testbench": "^9.0|^10.0|^11.0", + "phpunit/phpunit": "^10.1|^11.0|^12.5.12" }, "suggest": { "ext-intl": "*" @@ -4157,7 +4143,7 @@ ], "authors": [ { - "name": "Marc Cámara", + "name": "Marc C\u00e1mara", "email": "mcamara88@gmail.com", "role": "Developer" } @@ -4171,7 +4157,7 @@ ], "support": { "issues": "https://github.com/mcamara/laravel-localization/issues", - "source": "https://github.com/mcamara/laravel-localization/tree/v2.3.0" + "source": "https://github.com/mcamara/laravel-localization/tree/v2.4.0" }, "funding": [ { @@ -4183,7 +4169,7 @@ "type": "github" } ], - "time": "2025-02-26T06:38:01+00:00" + "time": "2026-03-17T19:24:07+00:00" }, { "name": "mediawiki/oauthclient", @@ -4309,16 +4295,16 @@ }, { "name": "monolog/monolog", - "version": "3.9.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", "shasum": "" }, "require": { @@ -4336,7 +4322,7 @@ "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", + "mongodb/mongodb": "^1.8 || ^2.0", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.8", "phpstan/phpstan": "^2", @@ -4396,7 +4382,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" }, "funding": [ { @@ -4408,26 +4394,26 @@ "type": "tidelift" } ], - "time": "2025-03-24T10:02:05+00:00" + "time": "2026-01-02T08:56:05+00:00" }, { "name": "msurguy/honeypot", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/msurguy/Honeypot.git", - "reference": "fedc19a7e863529d053e25199ffed0906218fc85" + "reference": "e2247e22db0679cc30f4a6506f93d4e95bd985c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/msurguy/Honeypot/zipball/fedc19a7e863529d053e25199ffed0906218fc85", - "reference": "fedc19a7e863529d053e25199ffed0906218fc85", + "url": "https://api.github.com/repos/msurguy/Honeypot/zipball/e2247e22db0679cc30f4a6506f93d4e95bd985c4", + "reference": "e2247e22db0679cc30f4a6506f93d4e95bd985c4", "shasum": "" }, "require": { - "illuminate/config": "4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0|^12.0", - "illuminate/support": "4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0|^12.0", - "illuminate/translation": "4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0|^12.0", + "illuminate/config": "4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0|^12.0|^13.0", + "illuminate/translation": "4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0|^12.0|^13.0", "php": ">=5.3.0" }, "require-dev": { @@ -4469,9 +4455,9 @@ ], "support": { "issues": "https://github.com/msurguy/Honeypot/issues", - "source": "https://github.com/msurguy/Honeypot/tree/1.4.0" + "source": "https://github.com/msurguy/Honeypot/tree/1.5.0" }, - "time": "2025-02-20T06:19:17+00:00" + "time": "2026-04-08T15:59:32+00:00" }, { "name": "mtdowling/jmespath.php", @@ -4541,42 +4527,40 @@ }, { "name": "nesbot/carbon", - "version": "2.73.0", + "version": "3.11.4", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", - "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60", "shasum": "" }, "require": { - "carbonphp/carbon-doctrine-types": "*", + "carbonphp/carbon-doctrine-types": "<100.0", "ext-json": "*", - "php": "^7.1.8 || ^8.0", + "php": "^8.1", "psr/clock": "^1.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", - "doctrine/orm": "^2.7 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "<6", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", + "kylekatarnls/multi-tester": "^2.5.3", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" }, "bin": [ "bin/carbon" @@ -4619,16 +4603,16 @@ } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", + "homepage": "https://carbonphp.github.io/carbon/", "keywords": [ "date", "datetime", "time" ], "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" }, "funding": [ { @@ -4644,29 +4628,31 @@ "type": "tidelift" } ], - "time": "2025-01-08T20:10:23+00:00" + "time": "2026-04-07T09:57:54+00:00" }, { "name": "nette/schema", - "version": "v1.3.2", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.4" + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -4676,6 +4662,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -4696,7 +4685,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", + "description": "\ud83d\udcd0 Nette Schema: validating data structures against a given Schema.", "homepage": "https://nette.org", "keywords": [ "config", @@ -4704,26 +4693,26 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" + "source": "https://github.com/nette/schema/tree/v1.3.5" }, - "time": "2024-10-06T23:10:23+00:00" + "time": "2026-02-23T03:47:12+00:00" }, { "name": "nette/utils", - "version": "v4.0.8", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", - "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7", "shasum": "" }, "require": { - "php": "8.0 - 8.5" + "php": "8.2 - 8.5" }, "conflict": { "nette/finder": "<3", @@ -4731,8 +4720,10 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -4746,7 +4737,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -4773,7 +4764,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "description": "\ud83d\udee0 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", "homepage": "https://nette.org", "keywords": [ "array", @@ -4793,22 +4784,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.8" + "source": "https://github.com/nette/utils/tree/v4.1.4" }, - "time": "2025-08-06T21:43:34+00:00" + "time": "2026-05-11T20:49:54+00:00" }, { "name": "nikic/php-parser", - "version": "v5.6.1", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -4851,38 +4842,37 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-08-13T20:13:15+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.17.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301" + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/5369ef84d8142c1d87e4ec278711d4ece3cbf301", - "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.1", - "symfony/console": "^6.4.15" + "php": "^8.2", + "symfony/console": "^7.4.4 || ^8.0.4" }, "require-dev": { - "illuminate/console": "^10.48.24", - "illuminate/support": "^10.48.24", - "laravel/pint": "^1.18.2", - "pestphp/pest": "^2.36.0", - "pestphp/pest-plugin-mock": "2.0.0", - "phpstan/phpstan": "^1.12.11", - "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^6.4.15", + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4891,6 +4881,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -4911,7 +4904,7 @@ "email": "enunomaduro@gmail.com" } ], - "description": "Its like Tailwind CSS, but for the console.", + "description": "It's like Tailwind CSS, but for the console.", "keywords": [ "cli", "console", @@ -4922,7 +4915,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.17.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" }, "funding": [ { @@ -4938,7 +4931,7 @@ "type": "github" } ], - "time": "2024-11-21T10:36:35+00:00" + "time": "2026-02-16T23:10:27+00:00" }, { "name": "nyholm/psr7", @@ -5020,33 +5013,29 @@ }, { "name": "owen-it/laravel-auditing", - "version": "v13.7.2", + "version": "v14.0.3", "source": { "type": "git", "url": "https://github.com/owen-it/laravel-auditing.git", - "reference": "4f72181622683bc667bbdd2e5fa09cd376329af4" + "reference": "34e8a21890082a7a353894a4acdeb2d301dbe0d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/owen-it/laravel-auditing/zipball/4f72181622683bc667bbdd2e5fa09cd376329af4", - "reference": "4f72181622683bc667bbdd2e5fa09cd376329af4", + "url": "https://api.github.com/repos/owen-it/laravel-auditing/zipball/34e8a21890082a7a353894a4acdeb2d301dbe0d4", + "reference": "34e8a21890082a7a353894a4acdeb2d301dbe0d4", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/database": "^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/filesystem": "^7.0|^8.0|^9.0|^10.0|^11.0", - "php": "^7.3|^8.0" + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/database": "^11.0|^12.0|^13.0", + "illuminate/filesystem": "^11.0|^12.0|^13.0", + "php": "^8.2" }, "require-dev": { - "laravel/legacy-factories": "*", - "mockery/mockery": "^1.0", - "orchestra/testbench": "^5.0|^6.0|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.6|^10.5|^11.0" - }, - "suggest": { - "irazasyed/larasupport": "Needed to publish the package configuration in Lumen" + "mockery/mockery": "^1.5.1", + "orchestra/testbench": "^9.0|^10.0|^11.0", + "phpunit/phpunit": "^11.0|^12.5.12" }, "type": "package", "extra": { @@ -5056,7 +5045,7 @@ ] }, "branch-alias": { - "dev-master": "v13-dev" + "dev-master": "v14-dev" } }, "autoload": { @@ -5070,11 +5059,11 @@ ], "authors": [ { - "name": "Antério Vieira", + "name": "Ant\u00e9rio Vieira", "email": "anteriovieira@gmail.com" }, { - "name": "Raphael França", + "name": "Raphael Fran\u00e7a", "email": "raphaelfrancabsb@gmail.com" }, { @@ -5082,7 +5071,7 @@ "email": "morten@visia.dk" } ], - "description": "Audit changes of your Eloquent models in Laravel/Lumen", + "description": "Audit changes of your Eloquent models in Laravel", "homepage": "https://laravel-auditing.com", "keywords": [ "Accountability", @@ -5104,141 +5093,7 @@ "issues": "https://github.com/owen-it/laravel-auditing/issues", "source": "https://github.com/owen-it/laravel-auditing" }, - "time": "2025-02-21T14:58:02+00:00" - }, - { - "name": "php-http/client-common", - "version": "2.7.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/httplug": "^2.0", - "php-http/message": "^1.6", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0 || ^2.0", - "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "doctrine/instantiator": "^1.1", - "guzzlehttp/psr7": "^1.4", - "nyholm/psr7": "^1.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" - }, - "suggest": { - "ext-json": "To detect JSON responses with the ContentTypePlugin", - "ext-libxml": "To detect XML responses with the ContentTypePlugin", - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\Common\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ], - "support": { - "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.7.2" - }, - "time": "2024-09-24T06:21:48+00:00" - }, - { - "name": "php-http/curl-client", - "version": "2.3.3", - "source": { - "type": "git", - "url": "https://github.com/php-http/curl-client.git", - "reference": "f3eb48d266341afec0229a7a37a03521d3646b81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/curl-client/zipball/f3eb48d266341afec0229a7a37a03521d3646b81", - "reference": "f3eb48d266341afec0229a7a37a03521d3646b81", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": "^7.4 || ^8.0", - "php-http/discovery": "^1.6", - "php-http/httplug": "^2.0", - "php-http/message": "^1.2", - "psr/http-client": "^1.0", - "psr/http-factory-implementation": "^1.0", - "symfony/options-resolver": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "provide": { - "php-http/async-client-implementation": "1.0", - "php-http/client-implementation": "1.0", - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "guzzlehttp/psr7": "^2.0", - "laminas/laminas-diactoros": "^2.0 || ^3.0", - "php-http/client-integration-tests": "^3.0", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^7.5 || ^9.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\Curl\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Михаил Красильников", - "email": "m.krasilnikov@yandex.ru" - } - ], - "description": "PSR-18 and HTTPlug Async client with cURL", - "homepage": "http://php-http.org", - "keywords": [ - "curl", - "http", - "psr-18" - ], - "support": { - "issues": "https://github.com/php-http/curl-client/issues", - "source": "https://github.com/php-http/curl-client/tree/2.3.3" - }, - "time": "2024-10-31T07:36:58+00:00" + "time": "2026-03-27T13:27:17+00:00" }, { "name": "php-http/discovery", @@ -5297,7 +5152,7 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", + "name": "M\u00e1rk S\u00e1gi-Kaz\u00e1r", "email": "mark.sagikazar@gmail.com" } ], @@ -5320,250 +5175,17 @@ "time": "2024-10-02T11:20:13+00:00" }, { - "name": "php-http/httplug", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.4.1" - }, - "time": "2024-09-23T11:39:58+00:00" - }, - { - "name": "php-http/message", - "version": "1.16.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "shasum": "" - }, - "require": { - "clue/stream-filter": "^1.5", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.1 || ^2.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.6", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0 || ^2.0", - "laminas/laminas-diactoros": "^2.0 || ^3.0", - "php-http/message-factory": "^1.0.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "slim/slim": "^3.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "laminas/laminas-diactoros": "Used with Diactoros Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation" - }, - "type": "library", - "autoload": { - "files": [ - "src/filters.php" - ], - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", - "keywords": [ - "http", - "message", - "psr-7" - ], - "support": { - "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.16.2" - }, - "time": "2024-10-02T11:34:13+00:00" - }, - { - "name": "php-http/message-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/1.1.0" - }, - "abandoned": "psr/http-factory", - "time": "2023-04-14T14:16:17+00:00" - }, - { - "name": "php-http/promise", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", - "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.3.1" - }, - "time": "2024-03-15T13:55:21+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.4", + "name": "phpoption/phpoption", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d" + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", - "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", "shasum": "" }, "require": { @@ -5613,7 +5235,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.4" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" }, "funding": [ { @@ -5625,7 +5247,7 @@ "type": "tidelift" } ], - "time": "2025-08-21T11:53:16+00:00" + "time": "2025-12-27T19:41:33+00:00" }, { "name": "predis/predis", @@ -5665,7 +5287,7 @@ ], "authors": [ { - "name": "Till Krüss", + "name": "Till Kr\u00fcss", "homepage": "https://till.im", "role": "Maintainer" } @@ -5998,16 +5620,16 @@ }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -6016,7 +5638,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -6031,7 +5653,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -6045,9 +5667,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", @@ -6152,16 +5774,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.10", + "version": "v0.12.22", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22" + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f", + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f", "shasum": "" }, "require": { @@ -6169,18 +5791,19 @@ "ext-tokenizer": "*", "nikic/php-parser": "^5.0 || ^4.0", "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" }, "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ @@ -6224,9 +5847,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.10" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.22" }, - "time": "2025-08-04T12:39:37+00:00" + "time": "2026-03-22T23:03:24+00:00" }, { "name": "ralouphie/getallheaders", @@ -6350,20 +5973,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.0", + "version": "4.9.2", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0" + "reference": "8429c78ca35a09f27565311b98101e2826affde0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -6422,27 +6045,27 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.0" + "source": "https://github.com/ramsey/uuid/tree/4.9.2" }, - "time": "2025-06-25T14:20:11+00:00" + "time": "2025-12-14T04:43:48+00:00" }, { "name": "rennokki/laravel-eloquent-query-cache", - "version": "3.6.1", + "version": "v3.6.2", "source": { "type": "git", - "url": "https://github.com/renoki-co/laravel-eloquent-query-cache.git", - "reference": "48e612b3e3fb1358f734f7742385b4853481a368" + "url": "https://github.com/edwh/laravel-eloquent-query-cache.git", + "reference": "3b4c6967774dfb19b28cf2a75f31174fceccc111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/renoki-co/laravel-eloquent-query-cache/zipball/48e612b3e3fb1358f734f7742385b4853481a368", - "reference": "48e612b3e3fb1358f734f7742385b4853481a368", + "url": "https://api.github.com/repos/edwh/laravel-eloquent-query-cache/zipball/3b4c6967774dfb19b28cf2a75f31174fceccc111", + "reference": "3b4c6967774dfb19b28cf2a75f31174fceccc111", "shasum": "" }, "require": { - "illuminate/database": "^10.5|^11.33|^12.0", - "illuminate/support": "^10.5|^11.33|^12.0" + "illuminate/database": "^10.5|^11.33|^12.0|^13.0", + "illuminate/support": "^10.5|^11.33|^12.0|^13.0" }, "require-dev": { "chelout/laravel-relationship-events": "^1.5|^2.0|^3.0", @@ -6458,7 +6081,16 @@ "Rennokki\\QueryCache\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "Rennokki\\QueryCache\\Test\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ] + }, "license": [ "Apache-2.0" ], @@ -6481,126 +6113,61 @@ "sql" ], "support": { - "issues": "https://github.com/renoki-co/laravel-eloquent-query-cache/issues", - "source": "https://github.com/renoki-co/laravel-eloquent-query-cache/tree/3.6.1" - }, - "funding": [ - { - "url": "https://github.com/rennokki", - "type": "github" - } - ], - "time": "2025-03-18T07:43:34+00:00" - }, - { - "name": "sentry/sdk", - "version": "3.6.0", - "source": { - "type": "git", - "url": "https://github.com/getsentry/sentry-php-sdk.git", - "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/24c235ff2027401cbea099bf88689e1a1f197c7a", - "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a", - "shasum": "" - }, - "require": { - "http-interop/http-factory-guzzle": "^1.0", - "sentry/sentry": "^3.22", - "symfony/http-client": "^4.3|^5.0|^6.0|^7.0" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sentry", - "email": "accounts@sentry.io" - } - ], - "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.", - "homepage": "http://sentry.io", - "keywords": [ - "crash-reporting", - "crash-reports", - "error-handler", - "error-monitoring", - "log", - "logging", - "sentry" - ], - "support": { - "issues": "https://github.com/getsentry/sentry-php-sdk/issues", - "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.6.0" + "source": "https://github.com/edwh/laravel-eloquent-query-cache/tree/v3.6.2" }, "funding": [ { - "url": "https://sentry.io/", - "type": "custom" - }, - { - "url": "https://sentry.io/pricing/", - "type": "custom" + "type": "github", + "url": "https://github.com/rennokki" } ], - "time": "2023-12-04T10:49:33+00:00" + "time": "2026-05-19T23:11:21+00:00" }, { "name": "sentry/sentry", - "version": "3.22.1", + "version": "4.27.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d" + "reference": "1f0544cff8443ac1d25d6521487118e28381a1c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", - "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/1f0544cff8443ac1d25d6521487118e28381a1c2", + "reference": "1f0544cff8443ac1d25d6521487118e28381a1c2", "shasum": "" }, "require": { + "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "guzzlehttp/promises": "^1.5.3|^2.0", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", - "php-http/async-client-implementation": "^1.0", - "php-http/client-common": "^1.5|^2.0", - "php-http/discovery": "^1.15", - "php-http/httplug": "^1.1|^2.0", - "php-http/message": "^1.5", - "php-http/message-factory": "^1.1", - "psr/http-factory": "^1.0", - "psr/http-factory-implementation": "^1.0", "psr/log": "^1.0|^2.0|^3.0", - "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0|^7.0", - "symfony/polyfill-php80": "^1.17" + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0" }, "conflict": { - "php-http/client-common": "1.8.0", "raven/raven": "*" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19|3.4.*", + "carthage-software/mago": "^1.13.3", + "friendsofphp/php-cs-fixer": "^3.4", + "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^1.8.4|^2.1.1", - "http-interop/http-factory-guzzle": "^1.0", "monolog/monolog": "^1.6|^2.0|^3.0", - "nikic/php-parser": "^4.10.3", - "php-http/mock-client": "^1.3", + "nyholm/psr7": "^1.8", + "open-telemetry/api": "^1.0", + "open-telemetry/exporter-otlp": "^1.0", + "open-telemetry/sdk": "^1.0", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.3", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^8.5.14|^9.4", - "symfony/phpunit-bridge": "^5.2|^6.0", - "vimeo/psalm": "^4.17" + "phpunit/phpunit": "^8.5.52|^9.6.34", + "spiral/roadrunner-http": "^3.6", + "spiral/roadrunner-worker": "^3.6" }, "suggest": { + "ext-excimer": "Enable Sentry profiling with the Excimer PHP extension.", "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." }, "type": "library", @@ -6622,7 +6189,7 @@ "email": "accounts@sentry.io" } ], - "description": "A PHP SDK for Sentry (http://sentry.io)", + "description": "PHP SDK for Sentry (http://sentry.io)", "homepage": "http://sentry.io", "keywords": [ "crash-reporting", @@ -6631,11 +6198,13 @@ "error-monitoring", "log", "logging", - "sentry" + "profiling", + "sentry", + "tracing" ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/3.22.1" + "source": "https://github.com/getsentry/sentry-php/tree/4.27.0" }, "funding": [ { @@ -6647,38 +6216,41 @@ "type": "custom" } ], - "time": "2023-11-13T11:47:28+00:00" + "time": "2026-05-06T14:32:16+00:00" }, { "name": "sentry/sentry-laravel", - "version": "3.8.2", + "version": "4.25.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "1293e5732f8405e12f000cdf5dee78c927a18de0" + "reference": "67efbdd74a752fcc1038676986b055a4df7d5084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1293e5732f8405e12f000cdf5dee78c927a18de0", - "reference": "1293e5732f8405e12f000cdf5dee78c927a18de0", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/67efbdd74a752fcc1038676986b055a4df7d5084", + "reference": "67efbdd74a752fcc1038676986b055a4df7d5084", "shasum": "" }, "require": { - "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", + "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", "nyholm/psr7": "^1.0", "php": "^7.2 | ^8.0", - "sentry/sdk": "^3.4", - "sentry/sentry": "^3.20.1", - "symfony/psr-http-message-bridge": "^1.0 | ^2.0" + "sentry/sentry": "^4.23.0", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0 | ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.11", - "laravel/folio": "^1.0", - "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", + "guzzlehttp/guzzle": "^7.2", + "laravel/folio": "^1.1", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", + "laravel/octane": "^2.15", + "laravel/pennant": "^1.0", + "livewire/livewire": "^2.0 | ^3.0 | ^4.0", "mockery/mockery": "^1.3", - "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.4 | ^9.3" + "phpunit/phpunit": "^8.5 | ^9.6 | ^10.4 | ^11.5" }, "type": "library", "extra": { @@ -6690,12 +6262,6 @@ "Sentry\\Laravel\\ServiceProvider", "Sentry\\Laravel\\Tracing\\ServiceProvider" ] - }, - "branch-alias": { - "dev-0.x": "0.x-dev", - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev", - "dev-master": "3.x-dev" } }, "autoload": { @@ -6723,11 +6289,13 @@ "laravel", "log", "logging", - "sentry" + "profiling", + "sentry", + "tracing" ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/3.8.2" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.25.1" }, "funding": [ { @@ -6739,7 +6307,7 @@ "type": "custom" } ], - "time": "2023-10-12T14:38:46+00:00" + "time": "2026-05-05T09:22:46+00:00" }, { "name": "soundasleep/html2text", @@ -6857,28 +6425,28 @@ }, { "name": "spatie/laravel-validation-rules", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-validation-rules.git", - "reference": "45d1fb21a8480a359c2a58124d9adf44b40c84ca" + "reference": "50fdfa933668f1c0e93d432fabab7062d9af5f94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-validation-rules/zipball/45d1fb21a8480a359c2a58124d9adf44b40c84ca", - "reference": "45d1fb21a8480a359c2a58124d9adf44b40c84ca", + "url": "https://api.github.com/repos/spatie/laravel-validation-rules/zipball/50fdfa933668f1c0e93d432fabab7062d9af5f94", + "reference": "50fdfa933668f1c0e93d432fabab7062d9af5f94", "shasum": "" }, "require": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "php": "^8.0" }, "require-dev": { "laravel/pint": "^1.3", "league/iso3166": "^3.0|^4.3", "myclabs/php-enum": "^1.6", - "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0", - "pestphp/pest": "^1.23|^2.6|^3.7", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0|^11.0", + "pestphp/pest": "^1.23|^2.6|^3.7|^4.0", "spatie/enum": "^2.2|^3.0" }, "suggest": { @@ -6918,7 +6486,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-validation-rules/issues", - "source": "https://github.com/spatie/laravel-validation-rules/tree/3.4.3" + "source": "https://github.com/spatie/laravel-validation-rules/tree/3.4.4" }, "funding": [ { @@ -6926,28 +6494,28 @@ "type": "github" } ], - "time": "2025-02-25T18:35:57+00:00" + "time": "2026-02-21T21:16:42+00:00" }, { "name": "spinen/laravel-discourse-sso", - "version": "2.9.1", + "version": "v2.9.3", "source": { "type": "git", - "url": "https://github.com/spinen/laravel-discourse-sso.git", - "reference": "f9f21e784789513664cf0deef8d99ed38912feec" + "url": "https://github.com/edwh/laravel-discourse-sso.git", + "reference": "075a4db1020cf3b733f42f5725ae2e6992791467" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spinen/laravel-discourse-sso/zipball/f9f21e784789513664cf0deef8d99ed38912feec", - "reference": "f9f21e784789513664cf0deef8d99ed38912feec", + "url": "https://api.github.com/repos/edwh/laravel-discourse-sso/zipball/075a4db1020cf3b733f42f5725ae2e6992791467", + "reference": "075a4db1020cf3b733f42f5725ae2e6992791467", "shasum": "" }, "require": { "cviebrock/discourse-php": "^0.9.3", "guzzlehttp/guzzle": "^7.4.5", - "illuminate/auth": "~8|~9|~10|~11", - "illuminate/routing": "~8|~9|~10|~11", - "illuminate/support": "~8|~9|~10|~11", + "illuminate/auth": "~8|~9|~10|~11|~12|~13", + "illuminate/routing": "~8|~9|~10|~11|~12|~13", + "illuminate/support": "~8|~9|~10|~11|~12|~13", "php": ">=8.1" }, "require-dev": { @@ -6970,7 +6538,11 @@ "Spinen\\Discourse\\": "src" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "Spinen\\Discourse\\": "tests" + } + }, "license": [ "MIT" ], @@ -6986,31 +6558,30 @@ ], "description": "Integrate Discourse SSO into Laravel.", "keywords": [ - "SSO", "discourse", "laravel", "library", "single sign on", - "spinen" + "spinen", + "sso" ], "support": { - "issues": "https://github.com/spinen/laravel-discourse-sso/issues", - "source": "https://github.com/spinen/laravel-discourse-sso/tree/2.9.1" + "source": "https://github.com/edwh/laravel-discourse-sso/tree/v2.9.3" }, - "time": "2024-04-14T21:40:02+00:00" + "time": "2026-05-19T23:10:18+00:00" }, { "name": "swagger-api/swagger-ui", - "version": "v5.28.0", + "version": "v5.32.6", "source": { "type": "git", "url": "https://github.com/swagger-api/swagger-ui.git", - "reference": "01e23904eec6075e032e07f3235607b463d9ecf3" + "reference": "dcdca62c8b64a0a54e4decd4e1a6c3c712fdcc60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/01e23904eec6075e032e07f3235607b463d9ecf3", - "reference": "01e23904eec6075e032e07f3235607b463d9ecf3", + "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/dcdca62c8b64a0a54e4decd4e1a6c3c712fdcc60", + "reference": "dcdca62c8b64a0a54e4decd4e1a6c3c712fdcc60", "shasum": "" }, "type": "library", @@ -7056,58 +6627,38 @@ ], "support": { "issues": "https://github.com/swagger-api/swagger-ui/issues", - "source": "https://github.com/swagger-api/swagger-ui/tree/v5.28.0" + "source": "https://github.com/swagger-api/swagger-ui/tree/v5.32.6" }, - "time": "2025-08-28T13:24:41+00:00" + "time": "2026-05-12T09:35:37+00:00" }, { - "name": "symfony/console", - "version": "v6.4.25", + "name": "symfony/clock", + "version": "v8.0.8", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "273fd29ff30ba0a88ca5fb83f7cf1ab69306adae" + "url": "https://github.com/symfony/clock.git", + "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/273fd29ff30ba0a88ca5fb83f7cf1ab69306adae", - "reference": "273fd29ff30ba0a88ca5fb83f7cf1ab69306adae", + "url": "https://api.github.com/repos/symfony/clock/zipball/b55a638b189a6faa875e0ccdb00908fb87af95b3", + "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "php": ">=8.4", + "psr/clock": "^1.0" }, "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "psr/clock-implementation": "1.0" }, "type": "library", "autoload": { + "files": [ + "Resources/now.php" + ], "psr-4": { - "Symfony\\Component\\Console\\": "" + "Symfony\\Component\\Clock\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7119,24 +6670,113 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", + "description": "Decouples applications from the system clock", "homepage": "https://symfony.com", "keywords": [ - "cli", - "command-line", - "console", - "terminal" + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v8.0.8" + }, + "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-03-30T15:14:47+00:00" + }, + { + "name": "symfony/console", + "version": "v8.0.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "3156577f46a38aa1b9323aad223de7a9cd426782" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/3156577f46a38aa1b9323aad223de7a9cd426782", + "reference": "3156577f46a38aa1b9323aad223de7a9cd426782", + "shasum": "" + }, + "require": { + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.4|^8.0" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/event-dispatcher": "^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/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.25" + "source": "https://github.com/symfony/console/tree/v8.0.11" }, "funding": [ { @@ -7156,24 +6796,24 @@ "type": "tidelift" } ], - "time": "2025-08-22T10:21:53+00:00" + "time": "2026-05-13T12:07:53+00:00" }, { "name": "symfony/css-selector", - "version": "v7.3.0", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "3665cfade90565430909b906394c73c8739e57d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/3665cfade90565430909b906394c73c8739e57d0", + "reference": "3665cfade90565430909b906394c73c8739e57d0", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "autoload": { @@ -7194,7 +6834,7 @@ "email": "fabien@symfony.com" }, { - "name": "Jean-François Simon", + "name": "Jean-Fran\u00e7ois Simon", "email": "jeanfrancois.simon@sensiolabs.com" }, { @@ -7205,7 +6845,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + "source": "https://github.com/symfony/css-selector/tree/v8.0.9" }, "funding": [ { @@ -7216,25 +6856,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-04-18T13:51:42+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.6.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", "shasum": "" }, "require": { @@ -7247,7 +6891,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -7272,7 +6916,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0" }, "funding": [ { @@ -7283,40 +6927,46 @@ "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": "2024-09-25T14:21:43+00:00" + "time": "2026-04-13T15:52:40+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.24", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "30fd0b3cf0e972e82636038ce4db0e4fe777112c" + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/30fd0b3cf0e972e82636038ce4db0e4fe777112c", - "reference": "30fd0b3cf0e972e82636038ce4db0e4fe777112c", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1119fe8dcfc3825ec74ec061b96ef0c8f281517", + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/polyfill-php85": "^1.32", + "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": "^7.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -7347,7 +6997,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.24" + "source": "https://github.com/symfony/error-handler/tree/v8.0.8" }, "funding": [ { @@ -7367,28 +7017,28 @@ "type": "tidelift" } ], - "time": "2025-07-24T08:25:04+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.3.3", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" + "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", - "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0c3c1a17604c4dbbec4b93fe162c538482096e1f", + "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -7397,13 +7047,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7431,7 +7082,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.9" }, "funding": [ { @@ -7451,20 +7102,20 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2026-04-18T13:51:42+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.6.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", "shasum": "" }, "require": { @@ -7478,7 +7129,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -7511,7 +7162,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0" }, "funding": [ { @@ -7522,32 +7173,36 @@ "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": "2024-09-25T14:21:43+00:00" + "time": "2026-01-05T13:30:16+00:00" }, { "name": "symfony/finder", - "version": "v6.4.24", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "73089124388c8510efb8d2d1689285d285937b08" + "reference": "e0be088d22278583a82da281886e8c3592fbf149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/73089124388c8510efb8d2d1689285d285937b08", - "reference": "73089124388c8510efb8d2d1689285d285937b08", + "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", + "reference": "e0be088d22278583a82da281886e8c3592fbf149", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7575,7 +7230,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.24" + "source": "https://github.com/symfony/finder/tree/v7.4.8" }, "funding": [ { @@ -7595,24 +7250,24 @@ "type": "tidelift" } ], - "time": "2025-07-15T12:02:45+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.25", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "b8e9dce2d8acba3c32af467bb58e0c3656886181" + "reference": "7e941c6abf4e3bf7dca160bf0e11ef36a9f832f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/b8e9dce2d8acba3c32af467bb58e0c3656886181", - "reference": "b8e9dce2d8acba3c32af467bb58e0c3656886181", + "url": "https://api.github.com/repos/symfony/http-client/zipball/7e941c6abf4e3bf7dca160bf0e11ef36a9f832f6", + "reference": "7e941c6abf4e3bf7dca160bf0e11ef36a9f832f6", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", @@ -7620,8 +7275,10 @@ "symfony/service-contracts": "^2.5|^3" }, "conflict": { + "amphp/amp": "<2.5", + "amphp/socket": "<1.1", "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.3" + "symfony/http-foundation": "<6.4" }, "provide": { "php-http/async-client-implementation": "*", @@ -7630,19 +7287,20 @@ "symfony/http-client-implementation": "3.0" }, "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", - "amphp/socket": "^1.1", + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/amphp-http-client-meta": "^1.0|^2.0", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7673,7 +7331,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.25" + "source": "https://github.com/symfony/http-client/tree/v7.4.9" }, "funding": [ { @@ -7693,20 +7351,20 @@ "type": "tidelift" } ], - "time": "2025-08-27T07:01:16+00:00" + "time": "2026-04-29T13:25:15+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.6.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "75d7043853a42837e68111812f4d964b01e5101c" + "reference": "4a2d00c37651c0bdc2b9e1c773487a8bf4edb12d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", - "reference": "75d7043853a42837e68111812f4d964b01e5101c", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/4a2d00c37651c0bdc2b9e1c773487a8bf4edb12d", + "reference": "4a2d00c37651c0bdc2b9e1c773487a8bf4edb12d", "shasum": "" }, "require": { @@ -7719,7 +7377,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -7755,7 +7413,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.7.0" }, "funding": [ { @@ -7766,45 +7424,50 @@ "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": "2025-04-29T11:18:49+00:00" + "time": "2026-03-06T13:17:50+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.25", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "6bc974c0035b643aa497c58d46d9e25185e4b272" + "reference": "9381209597ec66c25be154cbf2289076e64d1eab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6bc974c0035b643aa497c58d46d9e25185e4b272", - "reference": "6bc974c0035b643aa497c58d46d9e25185e4b272", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9381209597ec66c25be154cbf2289076e64d1eab", + "reference": "9381209597ec66c25be154cbf2289076e64d1eab", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" + "symfony/polyfill-mbstring": "^1.1" }, "conflict": { + "doctrine/dbal": "<3.6", "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "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" }, "type": "library", "autoload": { @@ -7832,7 +7495,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.25" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.8" }, "funding": [ { @@ -7852,77 +7515,63 @@ "type": "tidelift" } ], - "time": "2025-08-20T06:48:20+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.25", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a0ee3cea5cabf4ed960fd2ef57668ceeacdb6e15" + "reference": "20d3680373f4b791903c09e74b45402b4aeda71c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a0ee3cea5cabf4ed960fd2ef57668ceeacdb6e15", - "reference": "a0ee3cea5cabf4ed960fd2ef57668ceeacdb6e15", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/20d3680373f4b791903c09e74b45402b4aeda71c", + "reference": "20d3680373f4b791903c09e74b45402b4aeda71c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.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": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/flex": "<2.10", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "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": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/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": "^7.4|^8.0", + "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": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^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": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21" }, "type": "library", "autoload": { @@ -7950,7 +7599,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.25" + "source": "https://github.com/symfony/http-kernel/tree/v8.0.11" }, "funding": [ { @@ -7970,43 +7619,39 @@ "type": "tidelift" } ], - "time": "2025-08-29T07:55:45+00:00" + "time": "2026-05-13T18:07:14+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.25", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "628b43b45a3e6b15c8a633fb22df547ed9b492a2" + "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/628b43b45a3e6b15c8a633fb22df547ed9b492a2", - "reference": "628b43b45a3e6b15c8a633fb22df547ed9b492a2", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ca5f6edaf8780ece814404b58a4482b22b509c56", + "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.4", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.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": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-client-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.2|^7.0", - "symfony/twig-bridge": "^6.2|^7.0" + "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": { @@ -8034,7 +7679,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.25" + "source": "https://github.com/symfony/mailer/tree/v8.0.8" }, "funding": [ { @@ -8054,32 +7699,32 @@ "type": "tidelift" } ], - "time": "2025-08-13T09:41:44+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/mailgun-mailer", - "version": "v6.4.24", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "3fd4b7735e1ead349e2559b8b0be5b4f787af057" + "reference": "ffbcdbf93ed0700f083a6307acfb8f78dd3f091b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/3fd4b7735e1ead349e2559b8b0be5b4f787af057", - "reference": "3fd4b7735e1ead349e2559b8b0be5b4f787af057", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/ffbcdbf93ed0700f083a6307acfb8f78dd3f091b", + "reference": "ffbcdbf93ed0700f083a6307acfb8f78dd3f091b", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/mailer": "^5.4.21|^6.2.7|^7.0" + "php": ">=8.2", + "symfony/mailer": "^7.2|^8.0" }, "conflict": { - "symfony/http-foundation": "<6.2" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^6.3|^7.0", - "symfony/webhook": "^6.3|^7.0" + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/webhook": "^6.4|^7.0|^8.0" }, "type": "symfony-mailer-bridge", "autoload": { @@ -8107,7 +7752,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.24" + "source": "https://github.com/symfony/mailgun-mailer/tree/v7.4.0" }, "funding": [ { @@ -8127,44 +7772,41 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:14:14+00:00" + "time": "2025-08-04T07:05:15+00:00" }, { "name": "symfony/mime", - "version": "v6.4.24", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "664d5e844a2de5e11c8255d0aef6bc15a9660ac7" + "reference": "a9fcb293650c054b62a5b406f4e92e7b711ea333" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/664d5e844a2de5e11c8255d0aef6bc15a9660ac7", - "reference": "664d5e844a2de5e11c8255d0aef6bc15a9660ac7", + "url": "https://api.github.com/repos/symfony/mime/zipball/a9fcb293650c054b62a5b406f4e92e7b711ea333", + "reference": "a9fcb293650c054b62a5b406f4e92e7b711ea333", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "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": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.4|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "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|^8.0" }, "type": "library", "autoload": { @@ -8196,7 +7838,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.24" + "source": "https://github.com/symfony/mime/tree/v8.0.9" }, "funding": [ { @@ -8216,20 +7858,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T12:02:45+00:00" + "time": "2026-04-29T15:02:55+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.3.3", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d" + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0ff2f5c3df08a395232bbc3c2eb7e84912df911d", - "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", "shasum": "" }, "require": { @@ -8267,7 +7909,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.3.3" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.8" }, "funding": [ { @@ -8287,20 +7929,20 @@ "type": "tidelift" } ], - "time": "2025-08-05T10:16:07+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -8350,7 +7992,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" }, "funding": [ { @@ -8370,20 +8012,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e", + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e", "shasum": "" }, "require": { @@ -8432,7 +8074,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0" }, "funding": [ { @@ -8452,11 +8094,11 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-04-26T13:13:48+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -8519,7 +8161,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.37.0" }, "funding": [ { @@ -8543,7 +8185,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -8604,7 +8246,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0" }, "funding": [ { @@ -8628,16 +8270,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -8689,7 +8331,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0" }, "funding": [ { @@ -8709,20 +8351,20 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -8773,7 +8415,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" }, "funding": [ { @@ -8793,20 +8435,20 @@ "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149", + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149", "shasum": "" }, "require": { @@ -8853,7 +8495,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.37.0" }, "funding": [ { @@ -8873,31 +8515,25 @@ "type": "tidelift" } ], - "time": "2025-07-08T02:45:35+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.33.0", + "name": "symfony/polyfill-php84", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { "php": ">=7.2" }, - "provide": { - "ext-uuid": "*" - }, - "suggest": { - "ext-uuid": "For best performance" - }, "type": "library", "extra": { "thanks": { @@ -8910,8 +8546,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - } + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8919,24 +8558,24 @@ ], "authors": [ { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for uuid functions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "polyfill", "portable", - "uuid" + "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0" }, "funding": [ { @@ -8956,32 +8595,41 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { - "name": "symfony/process", - "version": "v6.4.25", + "name": "symfony/polyfill-php85", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8", - "reference": "6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/fcfa4973a9917cef23f2e38774da74a2b7d115ee", + "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.2" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Polyfill\\Php85\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -8990,18 +8638,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Executes commands in sub-processes", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "source": "https://github.com/symfony/process/tree/v6.4.25" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.37.0" }, "funding": [ { @@ -9021,54 +8675,45 @@ "type": "tidelift" } ], - "time": "2025-08-14T06:23:17+00:00" + "time": "2026-04-26T13:10:57+00:00" }, { - "name": "symfony/psr-http-message-bridge", - "version": "v2.3.1", + "name": "symfony/polyfill-uuid", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e", - "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/http-foundation": "^5.4 || ^6.0" + "php": ">=7.2" }, - "require-dev": { - "nyholm/psr7": "^1.1", - "psr/log": "^1.1 || ^2 || ^3", - "symfony/browser-kit": "^5.4 || ^6.0", - "symfony/config": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/framework-bundle": "^5.4 || ^6.0", - "symfony/http-kernel": "^5.4 || ^6.0", - "symfony/phpunit-bridge": "^6.2" + "provide": { + "ext-uuid": "*" }, "suggest": { - "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + "ext-uuid": "For best performance" }, - "type": "symfony-bridge", + "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.3-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Bridge\\PsrHttpMessage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Uuid\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9076,25 +8721,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Gr\u00e9goire Pineau", + "email": "lyrixx@lyrixx.info" }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], - "description": "PSR HTTP message bridge", - "homepage": "http://symfony.com", + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" + "compatibility", + "polyfill", + "portable", + "uuid" ], "support": { - "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" }, "funding": [ { @@ -9105,50 +8749,38 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2023-07-26T11:53:26+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/routing", - "version": "v6.4.24", + "name": "symfony/process", + "version": "v8.0.11", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "e4f94e625c8e6f910aa004a0042f7b2d398278f5" + "url": "https://github.com/symfony/process.git", + "reference": "26d89e459f037d2873300605d0a07e7a8ef84db0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e4f94e625c8e6f910aa004a0042f7b2d398278f5", - "reference": "e4f94e625c8e6f910aa004a0042f7b2d398278f5", + "url": "https://api.github.com/repos/symfony/process/zipball/26d89e459f037d2873300605d0a07e7a8ef84db0", + "reference": "26d89e459f037d2873300605d0a07e7a8ef84db0", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12|^2", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "php": ">=8.4" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Routing\\": "" + "Symfony\\Component\\Process\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -9168,16 +8800,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Maps an HTTP request to a set of configuration variables", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.24" + "source": "https://github.com/symfony/process/tree/v8.0.11" }, "funding": [ { @@ -9197,43 +8823,211 @@ "type": "tidelift" } ], - "time": "2025-07-15T08:46:37+00:00" + "time": "2026-05-11T16:56:32+00:00" }, { - "name": "symfony/service-contracts", - "version": "v3.6.0", + "name": "symfony/psr-http-message-bridge", + "version": "v7.4.8", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "76f1a57719a4a04c0ea18678a6c9305b5dcb9da8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/76f1a57719a4a04c0ea18678a6c9305b5dcb9da8", + "reference": "76f1a57719a4a04c0ea18678a6c9305b5dcb9da8", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.2", + "psr/http-message": "^1.0|^2.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0" }, "conflict": { - "ext-psr": "<1.1|>=2" + "php-http/discovery": "<1.15", + "symfony/http-kernel": "<6.4" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } + "require-dev": { + "nyholm/psr7": "^1.1", + "php-http/discovery": "^1.15", + "psr/log": "^1.1.4|^2|^3", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0" }, + "type": "symfony-bridge", "autoload": { "psr-4": { - "Symfony\\Contracts\\Service\\": "" + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "https://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "support": { + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.4.8" + }, + "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-03-24T13:12:05+00:00" + }, + { + "name": "symfony/routing", + "version": "v8.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038", + "reference": "75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038", + "shasum": "" + }, + "require": { + "php": ">=8.4", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "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": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v8.0.9" + }, + "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-04-29T15:02:55+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" }, "exclude-from-classmap": [ "/Test/" @@ -9264,7 +9058,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" }, "funding": [ { @@ -9275,44 +9069,47 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-25T09:37:31+00:00" + "time": "2026-03-28T09:44:51+00:00" }, { "name": "symfony/string", - "version": "v7.3.3", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" + "reference": "39be2ad058a3c0bd558edca23e65f009865d75ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "url": "https://api.github.com/repos/symfony/string/zipball/39be2ad058a3c0bd558edca23e65f009865d75ff", + "reference": "39be2ad058a3c0bd558edca23e65f009865d75ff", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -9351,7 +9148,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.3" + "source": "https://github.com/symfony/string/tree/v8.0.11" }, "funding": [ { @@ -9371,55 +9168,49 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2026-05-13T12:07:53+00:00" }, { "name": "symfony/translation", - "version": "v6.4.24", + "version": "v8.0.10", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "300b72643e89de0734d99a9e3f8494a3ef6936e1" + "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/300b72643e89de0734d99a9e3f8494a3ef6936e1", - "reference": "300b72643e89de0734d99a9e3f8494a3ef6936e1", + "url": "https://api.github.com/repos/symfony/translation/zipball/f63e9342e12646a57c91ef8a366a4f9d8e557b67", + "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation-contracts": "^3.6.1" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "nikic/php-parser": "<5.0", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/service-contracts": "<2.5" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -9450,7 +9241,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.24" + "source": "https://github.com/symfony/translation/tree/v8.0.10" }, "funding": [ { @@ -9470,20 +9261,20 @@ "type": "tidelift" } ], - "time": "2025-07-30T17:30:48+00:00" + "time": "2026-05-06T11:30:54+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.6.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d", "shasum": "" }, "require": { @@ -9496,7 +9287,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -9532,7 +9323,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.0" }, "funding": [ { @@ -9543,33 +9334,37 @@ "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": "2024-09-27T08:32:26+00:00" + "time": "2026-01-05T13:30:16+00:00" }, { "name": "symfony/uid", - "version": "v6.4.24", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "17da16a750541a42cf2183935e0f6008316c23f7" + "reference": "4d9d6510bbe88ebb4608b7200d18606cdf80825c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/17da16a750541a42cf2183935e0f6008316c23f7", - "reference": "17da16a750541a42cf2183935e0f6008316c23f7", + "url": "https://api.github.com/repos/symfony/uid/zipball/4d9d6510bbe88ebb4608b7200d18606cdf80825c", + "reference": "4d9d6510bbe88ebb4608b7200d18606cdf80825c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.4", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -9586,7 +9381,7 @@ ], "authors": [ { - "name": "Grégoire Pineau", + "name": "Gr\u00e9goire Pineau", "email": "lyrixx@lyrixx.info" }, { @@ -9606,7 +9401,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.24" + "source": "https://github.com/symfony/uid/tree/v8.0.9" }, "funding": [ { @@ -9626,37 +9421,36 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:14:14+00:00" + "time": "2026-04-30T16:10:06+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.25", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c6cd92486e9fc32506370822c57bc02353a5a92c" + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6cd92486e9fc32506370822c57bc02353a5a92c", - "reference": "c6cd92486e9fc32506370822c57bc02353a5a92c", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "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" }, "bin": [ "Resources/bin/var-dump-server" @@ -9694,7 +9488,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.25" + "source": "https://github.com/symfony/var-dumper/tree/v8.0.8" }, "funding": [ { @@ -9714,32 +9508,32 @@ "type": "tidelift" } ], - "time": "2025-08-13T09:41:44+00:00" + "time": "2026-03-31T07:15:36+00:00" }, { "name": "symfony/yaml", - "version": "v7.3.3", + "version": "v7.4.11", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d4f4a66866fe2451f61296924767280ab5732d9d" + "reference": "e2eb64a57763815ccae07ac1c7653d6cc1c326fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d", - "reference": "d4f4a66866fe2451f61296924767280ab5732d9d", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e2eb64a57763815ccae07ac1c7653d6cc1c326fd", + "reference": "e2eb64a57763815ccae07ac1c7653d6cc1c326fd", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -9770,7 +9564,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.3.3" + "source": "https://github.com/symfony/yaml/tree/v7.4.11" }, "funding": [ { @@ -9790,20 +9584,20 @@ "type": "tidelift" } ], - "time": "2025-08-27T11:34:33+00:00" + "time": "2026-05-13T12:04:42+00:00" }, { "name": "tedivm/jshrink", - "version": "v1.8.0", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/tedious/JShrink.git", - "reference": "29ee510d684c22060040f4260a527206eb8199f1" + "reference": "f76454d4c48ddae6354a2f0eeb16633d4e755c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tedious/JShrink/zipball/29ee510d684c22060040f4260a527206eb8199f1", - "reference": "29ee510d684c22060040f4260a527206eb8199f1", + "url": "https://api.github.com/repos/tedious/JShrink/zipball/f76454d4c48ddae6354a2f0eeb16633d4e755c9a", + "reference": "f76454d4c48ddae6354a2f0eeb16633d4e755c9a", "shasum": "" }, "require": { @@ -9838,7 +9632,7 @@ ], "support": { "issues": "https://github.com/tedious/JShrink/issues", - "source": "https://github.com/tedious/JShrink/tree/v1.8.0" + "source": "https://github.com/tedious/JShrink/tree/v1.8.1" }, "funding": [ { @@ -9850,27 +9644,27 @@ "type": "tidelift" } ], - "time": "2025-07-28T17:09:23+00:00" + "time": "2025-11-20T14:34:30+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d" + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^7.4 || ^8.0", - "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^2.0", @@ -9903,48 +9697,49 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" }, - "time": "2024-12-21T16:25:41+00:00" + "time": "2025-12-02T11:56:42+00:00" }, { "name": "toin0u/geocoder-laravel", - "version": "4.7.0", + "version": "13.2.0", "source": { "type": "git", "url": "https://github.com/geocoder-php/GeocoderLaravel.git", - "reference": "f354165d10768b04da0e46b76dd99fd44dba89d2" + "reference": "119bf8490d38703246c51c180b20b8d80f8b051b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/geocoder-php/GeocoderLaravel/zipball/f354165d10768b04da0e46b76dd99fd44dba89d2", - "reference": "f354165d10768b04da0e46b76dd99fd44dba89d2", + "url": "https://api.github.com/repos/geocoder-php/GeocoderLaravel/zipball/119bf8490d38703246c51c180b20b8d80f8b051b", + "reference": "119bf8490d38703246c51c180b20b8d80f8b051b", "shasum": "" }, "require": { - "geocoder-php/chain-provider": "^4.0", - "geocoder-php/geo-plugin-provider": "^4.0", - "geocoder-php/google-maps-provider": "^4.0", + "geocoder-php/chain-provider": "^4.0|^5.0", + "geocoder-php/geo-plugin-provider": "^4.0|^5.0", + "geocoder-php/google-maps-provider": "^4.0|^5.0", "guzzlehttp/psr7": "*", "http-interop/http-factory-guzzle": "^1.0", - "illuminate/cache": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "php": "^8.0", - "php-http/curl-client": "*", - "willdurand/geocoder": "^4.0" + "illuminate/cache": "^11.0|^12.0|^13.0", + "illuminate/http": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.2|^8.3|^8.4|^8.5", + "willdurand/geocoder": "^4.0|^5.0" }, "require-dev": { - "doctrine/dbal": "*", "geocoder-php/bing-maps-provider": "^4.0", "geocoder-php/geoip2-provider": "^4.0", "geocoder-php/maxmind-binary-provider": "^4.0", - "laravel/legacy-factories": "^1.0", - "orchestra/testbench": "^7.0|^8.0|^9.0", - "orchestra/testbench-browser-kit": "^7.0|^8.5", - "orchestra/testbench-dusk": "^7.0|^8.22", - "php-coveralls/php-coveralls": "*", - "phpunit/phpunit": "8.5|^9.0|^10.5", - "sebastian/phpcpd": "^5.0|^6.0" + "geocoder-php/nominatim-provider": "^5.0", + "larastan/larastan": "^3.5", + "laravel/boost": "^2.4", + "laravel/pint": "^1.24", + "mikebronner/development-settings": "^0.1", + "orchestra/testbench": "^9.0|^10.0|^11.0", + "pestphp/pest": "^3.0|^4.0", + "pestphp/pest-plugin-laravel": "^3.0|^4.0", + "slevomat/coding-standard": "^8.24" }, "type": "library", "extra": { @@ -9986,87 +9781,32 @@ ], "support": { "issues": "https://github.com/geocoder-php/GeocoderLaravel/issues", - "source": "https://github.com/geocoder-php/GeocoderLaravel/tree/4.7.0" - }, - "time": "2024-03-14T22:56:46+00:00" - }, - { - "name": "twbs/bootstrap", - "version": "v4.1.0", - "source": { - "type": "git", - "url": "https://github.com/twbs/bootstrap.git", - "reference": "8f7bd419935adfcd53c471a0202083464800619e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twbs/bootstrap/zipball/8f7bd419935adfcd53c471a0202083464800619e", - "reference": "8f7bd419935adfcd53c471a0202083464800619e", - "shasum": "" - }, - "replace": { - "twitter/bootstrap": "self.version" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jacob Thornton", - "email": "jacobthornton@gmail.com" - }, - { - "name": "Mark Otto", - "email": "markdotto@gmail.com" - } - ], - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "homepage": "https://getbootstrap.com/", - "keywords": [ - "JS", - "css", - "framework", - "front-end", - "mobile-first", - "responsive", - "sass", - "web" - ], - "support": { - "issues": "https://github.com/twbs/bootstrap/issues", - "source": "https://github.com/twbs/bootstrap/tree/v4-dev" + "source": "https://github.com/geocoder-php/GeocoderLaravel/tree/13.2.0" }, - "time": "2018-04-09T16:00:23+00:00" + "time": "2026-05-19T17:02:25+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.2", + "version": "v5.6.3", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" + "reference": "955e7815d677a3eaa7075231212f2110983adecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", + "graham-campbell/result-type": "^1.1.4", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", @@ -10115,7 +9855,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" }, "funding": [ { @@ -10127,27 +9867,27 @@ "type": "tidelift" } ], - "time": "2025-04-30T23:37:27+00:00" + "time": "2025-12-27T19:49:13+00:00" }, { "name": "voku/portable-ascii", - "version": "2.0.3", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + "reference": "8e1051fe39379367aecf014f41744ce7539a856f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" }, "suggest": { "ext-intl": "Use Intl for transliterator_transliterate() support" @@ -10177,7 +9917,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + "source": "https://github.com/voku/portable-ascii/tree/2.1.1" }, "funding": [ { @@ -10201,87 +9941,29 @@ "type": "tidelift" } ], - "time": "2024-11-21T01:49:47+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2026-04-26T05:33:54+00:00" }, { "name": "willdurand/geocoder", - "version": "4.6.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/geocoder-php/php-common.git", - "reference": "be3d9ed0fddf8c698ee079d8a07ae9520b4a49a1" + "reference": "a749e00819d2929bd0ec40fb79853956332970ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/geocoder-php/php-common/zipball/be3d9ed0fddf8c698ee079d8a07ae9520b4a49a1", - "reference": "be3d9ed0fddf8c698ee079d8a07ae9520b4a49a1", + "url": "https://api.github.com/repos/geocoder-php/php-common/zipball/a749e00819d2929bd0ec40fb79853956332970ba", + "reference": "a749e00819d2929bd0ec40fb79853956332970ba", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": ">=8.2" }, "require-dev": { "nyholm/nsa": "^1.1", "phpunit/phpunit": "^9.5", - "symfony/stopwatch": "~2.5" + "symfony/stopwatch": "~2.5 || ~5.0" }, "suggest": { "symfony/stopwatch": "If you want to use the TimedGeocoder" @@ -10289,7 +9971,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -10319,9 +10001,9 @@ "geoip" ], "support": { - "source": "https://github.com/geocoder-php/php-common/tree/4.6.0" + "source": "https://github.com/geocoder-php/php-common/tree/5.0.0" }, - "time": "2022-07-30T11:09:43+00:00" + "time": "2025-01-01T15:52:42+00:00" }, { "name": "wouternl/laravel-drip", @@ -10338,7 +10020,7 @@ "shasum": "" }, "require": { - "laravel/framework": "5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "laravel/framework": "5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "php": ">=8.1.0" }, "default-branch": true, @@ -10463,44 +10145,53 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.16.0", + "version": "v4.2.8", "source": { "type": "git", - "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23" + "url": "https://github.com/fruitcake/laravel-debugbar.git", + "reference": "799d70c1101d3f8840dd76ff68ff6a78f9352905" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/f265cf5e38577d42311f1a90d619bcd3740bea23", - "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23", + "url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/799d70c1101d3f8840dd76ff68ff6a78f9352905", + "reference": "799d70c1101d3f8840dd76ff68ff6a78f9352905", "shasum": "" }, "require": { - "illuminate/routing": "^9|^10|^11|^12", - "illuminate/session": "^9|^10|^11|^12", - "illuminate/support": "^9|^10|^11|^12", - "php": "^8.1", - "php-debugbar/php-debugbar": "~2.2.0", - "symfony/finder": "^6|^7" + "illuminate/routing": "^11|^12|^13.0", + "illuminate/session": "^11|^12|^13.0", + "illuminate/support": "^11|^12|^13.0", + "php": "^8.2", + "php-debugbar/php-debugbar": "^3.7.2", + "php-debugbar/symfony-bridge": "^1.1" }, "require-dev": { + "larastan/larastan": "^3", + "laravel/octane": "^2", + "laravel/pennant": "^1", + "laravel/pint": "^1", + "laravel/telescope": "^5.16", + "livewire/livewire": "^3.7|^4", "mockery/mockery": "^1.3.3", - "orchestra/testbench-dusk": "^7|^8|^9|^10", - "phpunit/phpunit": "^9.5.10|^10|^11", - "squizlabs/php_codesniffer": "^3.5" + "orchestra/testbench-dusk": "^9|^10|^11", + "php-debugbar/twig-bridge": "^2.0", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11", + "shipmonk/phpstan-rules": "^4.3" }, "type": "library", "extra": { "laravel": { "aliases": { - "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" + "Debugbar": "Fruitcake\\LaravelDebugbar\\Facades\\Debugbar" }, "providers": [ - "Barryvdh\\Debugbar\\ServiceProvider" + "Fruitcake\\LaravelDebugbar\\ServiceProvider" ] }, "branch-alias": { - "dev-master": "3.16-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -10508,7 +10199,7 @@ "src/helpers.php" ], "psr-4": { - "Barryvdh\\Debugbar\\": "src/" + "Fruitcake\\LaravelDebugbar\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -10516,6 +10207,10 @@ "MIT" ], "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, { "name": "Barry vd. Heuvel", "email": "barryvdh@gmail.com" @@ -10523,6 +10218,7 @@ ], "description": "PHP Debugbar integration for Laravel", "keywords": [ + "barryvdh", "debug", "debugbar", "dev", @@ -10531,8 +10227,8 @@ "webprofiler" ], "support": { - "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.0" + "issues": "https://github.com/fruitcake/laravel-debugbar/issues", + "source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.2.8" }, "funding": [ { @@ -10544,146 +10240,7 @@ "type": "github" } ], - "time": "2025-07-14T11:56:43+00:00" - }, - { - "name": "cebe/php-openapi", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/cebe/php-openapi.git", - "reference": "893ab104be1f5dfe5a39766703f583584e43c6e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cebe/php-openapi/zipball/893ab104be1f5dfe5a39766703f583584e43c6e1", - "reference": "893ab104be1f5dfe5a39766703f583584e43c6e1", - "shasum": "" - }, - "require": { - "ext-json": "*", - "justinrainbow/json-schema": "^5.2 || ^6.0", - "php": ">=7.1.0", - "symfony/yaml": "^3.4 || ^4 || ^5 || ^6 || ^7.0" - }, - "conflict": { - "symfony/yaml": "3.4.0 - 3.4.4 || 4.0.0 - 4.4.17 || 5.0.0 - 5.1.9 || 5.2.0" - }, - "require-dev": { - "apis-guru/openapi-directory": "1.0.0", - "cebe/indent": "*", - "mermade/openapi3-examples": "1.0.0", - "nexmo/api-specification": "1.0.0", - "oai/openapi-specification": "3.0.3", - "phpstan/phpstan": "^0.12.0 || ^1.9", - "phpunit/phpunit": "^6.5 || ^7.5 || ^8.5 || ^9.4" - }, - "bin": [ - "bin/php-openapi" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "cebe\\openapi\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "https://cebe.cc/", - "role": "Creator" - } - ], - "description": "Read and write OpenAPI yaml/json files and make the content accessable in PHP objects.", - "homepage": "https://github.com/cebe/php-openapi#readme", - "keywords": [ - "openapi" - ], - "support": { - "issues": "https://github.com/cebe/php-openapi/issues", - "source": "https://github.com/cebe/php-openapi" - }, - "time": "2025-05-07T08:44:12+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" + "time": "2026-04-20T13:31:29+00:00" }, { "name": "fakerphp/faker", @@ -10733,7 +10290,7 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "Fran\u00e7ois Zaninotto" } ], "description": "Faker is a PHP library that generates fake data for you.", @@ -10799,115 +10356,41 @@ }, "time": "2025-04-30T06:54:44+00:00" }, - { - "name": "justinrainbow/json-schema", - "version": "6.5.1", - "source": { - "type": "git", - "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "b5ab21e431594897e5bb86343c01f140ba862c26" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/b5ab21e431594897e5bb86343c01f140ba862c26", - "reference": "b5ab21e431594897e5bb86343c01f140ba862c26", - "shasum": "" - }, - "require": { - "ext-json": "*", - "marc-mabe/php-enum": "^4.0", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "3.3.0", - "json-schema/json-schema-test-suite": "^23.2", - "marc-mabe/php-enum-phpstan": "^2.0", - "phpspec/prophecy": "^1.19", - "phpstan/phpstan": "^1.12", - "phpunit/phpunit": "^8.5" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/jsonrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.5.1" - }, - "time": "2025-08-29T10:58:11+00:00" - }, { "name": "laravel/dusk", - "version": "v7.13.0", + "version": "v8.6.0", "source": { "type": "git", "url": "https://github.com/laravel/dusk.git", - "reference": "dce7c4cc1c308bb18e95b2b3bf7d06d3f040a1f6" + "reference": "e7fd48762c6a82ad2cd311db07587aa2a97ce143" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/dce7c4cc1c308bb18e95b2b3bf7d06d3f040a1f6", - "reference": "dce7c4cc1c308bb18e95b2b3bf7d06d3f040a1f6", + "url": "https://api.github.com/repos/laravel/dusk/zipball/e7fd48762c6a82ad2cd311db07587aa2a97ce143", + "reference": "e7fd48762c6a82ad2cd311db07587aa2a97ce143", "shasum": "" }, "require": { "ext-json": "*", "ext-zip": "*", - "guzzlehttp/guzzle": "^7.2", - "illuminate/console": "^9.0|^10.0", - "illuminate/support": "^9.0|^10.0", - "nesbot/carbon": "^2.0", - "php": "^8.0", - "php-webdriver/webdriver": "^1.9.0", - "symfony/console": "^6.0", - "symfony/finder": "^6.0", - "symfony/process": "^6.0", + "guzzlehttp/guzzle": "^7.5", + "illuminate/console": "^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "php-webdriver/webdriver": "^1.15.2", + "symfony/console": "^6.2|^7.0|^8.0", + "symfony/finder": "^6.2|^7.0|^8.0", + "symfony/process": "^6.2|^7.0|^8.0", "vlucas/phpdotenv": "^5.2" }, "require-dev": { - "mockery/mockery": "^1.4.2", - "orchestra/testbench": "^7.33|^8.13", + "laravel/framework": "^10.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.6", + "orchestra/testbench-core": "^8.19|^9.17|^10.8|^11.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5.10|^10.0.1", - "psy/psysh": "^0.11.12" + "phpunit/phpunit": "^10.1|^11.0|^12.0.1", + "psy/psysh": "^0.11.12|^0.12", + "symfony/yaml": "^6.2|^7.0|^8.0" }, "suggest": { "ext-pcntl": "Used to gracefully terminate Dusk when tests are running." @@ -10918,9 +10401,6 @@ "providers": [ "Laravel\\Dusk\\DuskServiceProvider" ] - }, - "branch-alias": { - "dev-master": "7.x-dev" } }, "autoload": { @@ -10946,444 +10426,139 @@ ], "support": { "issues": "https://github.com/laravel/dusk/issues", - "source": "https://github.com/laravel/dusk/tree/v7.13.0" + "source": "https://github.com/laravel/dusk/tree/v8.6.0" }, - "time": "2024-02-23T22:29:53+00:00" + "time": "2026-04-15T14:50:40+00:00" }, { - "name": "league/openapi-psr7-validator", - "version": "0.17", + "name": "masterminds/html5", + "version": "2.10.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/openapi-psr7-validator.git", - "reference": "c3daf7cc679a8c40c591a0272392ab726b92844f" + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "fcf91eb64359852f00d921887b219479b4f21251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/openapi-psr7-validator/zipball/c3daf7cc679a8c40c591a0272392ab726b92844f", - "reference": "c3daf7cc679a8c40c591a0272392ab726b92844f", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", "shasum": "" }, "require": { - "cebe/php-openapi": "^1.6", - "ext-json": "*", - "league/uri": "^6.3", - "php": ">=7.2", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/http-message": "^1.0", - "psr/http-server-middleware": "^1.0", - "respect/validation": "^1.1.3 || ^2.0", - "riverline/multipart-parser": "^2.0.3", - "webmozart/assert": "^1.4" + "ext-dom": "*", + "php": ">=5.3.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "guzzlehttp/psr7": "^1.5", - "hansott/psr7-cookies": "^3.0.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-webmozart-assert": "^1", - "phpunit/phpunit": "^7 || ^8 || ^9", - "symfony/cache": "^5.1" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, "autoload": { "psr-4": { - "League\\OpenAPIValidation\\": "src/" + "Masterminds\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Validate PSR-7 messages against OpenAPI (3.0.2) specifications expressed in YAML or JSON", - "homepage": "https://github.com/thephpleague/openapi-psr7-validator", + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", "keywords": [ - "http", - "openapi", - "psr7", - "validation" + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" ], "support": { - "issues": "https://github.com/thephpleague/openapi-psr7-validator/issues", - "source": "https://github.com/thephpleague/openapi-psr7-validator/tree/0.17" + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" }, - "time": "2022-02-10T13:54:23+00:00" + "time": "2025-07-25T09:04:22+00:00" }, { - "name": "league/uri", - "version": "6.8.0", + "name": "mockery/mockery", + "version": "1.6.12", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39" + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/a700b4656e4c54371b799ac61e300ab25a2d1d39", - "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { - "ext-json": "*", - "league/uri-interfaces": "^2.3", - "php": "^8.1", - "psr/http-message": "^1.0.1" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" }, "conflict": { - "league/uri-schemes": "^1.0" + "phpunit/phpunit": "<8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^v3.9.5", - "nyholm/psr7": "^1.5.1", - "php-http/psr7-integration-tests": "^1.1.1", - "phpbench/phpbench": "^1.2.6", - "phpstan/phpstan": "^1.8.5", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.1.1", - "phpstan/phpstan-strict-rules": "^1.4.3", - "phpunit/phpunit": "^9.5.24", - "psr/http-factory": "^1.0.1" - }, - "suggest": { - "ext-fileinfo": "Needed to create Data URI from a filepath", - "ext-intl": "Needed to improve host validation", - "league/uri-components": "Needed to easily manipulate URI objects", - "psr/http-factory": "Needed to use the URI factory" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.x-dev" - } - }, "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], "psr-4": { - "League\\Uri\\": "src" + "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "P\u00e1draic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/6.8.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2022-09-13T19:58:47+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.19", - "phpstan/phpstan-strict-rules": "^0.12.9", - "phpunit/phpunit": "^8.5.15 || ^9.5" - }, - "suggest": { - "ext-intl": "to use the IDNA feature", - "symfony/intl": "to use the IDNA feature via Symfony Polyfill" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common interface for URI representation", - "homepage": "http://github.com/thephpleague/uri-interfaces", - "keywords": [ - "rfc3986", - "rfc3987", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/thephpleague/uri-interfaces/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2021-06-28T04:27:21+00:00" - }, - { - "name": "marc-mabe/php-enum", - "version": "v4.7.1", - "source": { - "type": "git", - "url": "https://github.com/marc-mabe/php-enum.git", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/7159809e5cfa041dca28e61f7f7ae58063aae8ed", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed", - "shasum": "" - }, - "require": { - "ext-reflection": "*", - "php": "^7.1 | ^8.0" - }, - "require-dev": { - "phpbench/phpbench": "^0.16.10 || ^1.0.4", - "phpstan/phpstan": "^1.3.1", - "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", - "vimeo/psalm": "^4.17.0 | ^5.26.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.2-dev", - "dev-master": "4.7-dev" - } - }, - "autoload": { - "psr-4": { - "MabeEnum\\": "src/" - }, - "classmap": [ - "stubs/Stringable.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Marc Bennewitz", - "email": "dev@mabe.berlin", - "homepage": "https://mabe.berlin/", - "role": "Lead" - } - ], - "description": "Simple and fast implementation of enumerations with native PHP", - "homepage": "https://github.com/marc-mabe/php-enum", - "keywords": [ - "enum", - "enum-map", - "enum-set", - "enumeration", - "enumerator", - "enummap", - "enumset", - "map", - "set", - "type", - "type-hint", - "typehint" - ], - "support": { - "issues": "https://github.com/marc-mabe/php-enum/issues", - "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.1" - }, - "time": "2024-11-28T04:54:44+00:00" - }, - { - "name": "masterminds/html5", - "version": "2.10.0", - "source": { - "type": "git", - "url": "https://github.com/Masterminds/html5-php.git", - "reference": "fcf91eb64359852f00d921887b219479b4f21251" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", - "reference": "fcf91eb64359852f00d921887b219479b4f21251", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Masterminds\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Butcher", - "email": "technosophos@gmail.com" - }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - }, - { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - } - ], - "description": "An HTML5 parser and serializer.", - "homepage": "http://masterminds.github.io/html5-php", - "keywords": [ - "HTML5", - "dom", - "html", - "parser", - "querypath", - "serializer", - "xml" - ], - "support": { - "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" - }, - "time": "2025-07-25T09:04:22+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.6.12", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ "BDD", "TDD", @@ -11436,190 +10611,34 @@ "autoload": { "files": [ "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-08-01T08:46:24+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v6.4.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "f05978827b9343cba381ca05b8c7deee346b6015" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015", - "reference": "f05978827b9343cba381ca05b8c7deee346b6015", - "shasum": "" - }, - "require": { - "filp/whoops": "^2.14.5", - "php": "^8.0.0", - "symfony/console": "^6.0.2" - }, - "require-dev": { - "brianium/paratest": "^6.4.1", - "laravel/framework": "^9.26.1", - "laravel/pint": "^1.1.1", - "nunomaduro/larastan": "^1.0.3", - "nunomaduro/mock-final-classes": "^1.1.0", - "orchestra/testbench": "^7.7", - "phpunit/phpunit": "^9.5.23", - "spatie/ignition": "^1.4.1" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-develop": "6.x-dev" - } - }, - "autoload": { - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2023-01-03T12:54:54+00:00" - }, - { - "name": "osteel/openapi-httpfoundation-testing", - "version": "v0.8", - "source": { - "type": "git", - "url": "https://github.com/osteel/openapi-httpfoundation-testing.git", - "reference": "718cd0c2b3dd9fceaab51faa9b08009477b6c025" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/osteel/openapi-httpfoundation-testing/zipball/718cd0c2b3dd9fceaab51faa9b08009477b6c025", - "reference": "718cd0c2b3dd9fceaab51faa9b08009477b6c025", - "shasum": "" - }, - "require": { - "ext-json": "*", - "league/openapi-psr7-validator": "^0.17", - "nyholm/psr7": "^1.0", - "php": "^7.2|^8.0", - "psr/http-message": "^1.0", - "symfony/http-foundation": "^4.0 || ^5.0 || ^6.0", - "symfony/psr-http-message-bridge": "^2.0" - }, - "require-dev": { - "phpunit/phpunit": ">=8.5.23", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { + ], "psr-4": { - "Osteel\\OpenApi\\Testing\\": "src" + "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Yannick Chenot", - "email": "yannick@yellowraincoat.co.uk", - "homepage": "https://github.com/osteel", - "role": "Maintainer" - } - ], - "description": "Validate HttpFoundation requests and responses against OpenAPI (3.0.x) definitions", - "homepage": "https://github.com/osteel/openapi-httpfoundation-testing", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "api", - "http", - "httpfoundation", - "laravel", - "openapi", - "symfony", - "testing", - "validation" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], "support": { - "issues": "https://github.com/osteel/openapi-httpfoundation-testing/issues", - "source": "https://github.com/osteel/openapi-httpfoundation-testing/tree/v0.8" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, - "time": "2023-02-01T19:24:59+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" }, { "name": "phar-io/manifest", @@ -11741,46 +10760,63 @@ }, { "name": "php-debugbar/php-debugbar", - "version": "v2.2.4", + "version": "v3.7.6", "source": { "type": "git", "url": "https://github.com/php-debugbar/php-debugbar.git", - "reference": "3146d04671f51f69ffec2a4207ac3bdcf13a9f35" + "reference": "1690ee1728827f9deb4b60457fa387cf44672c56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/3146d04671f51f69ffec2a4207ac3bdcf13a9f35", - "reference": "3146d04671f51f69ffec2a4207ac3bdcf13a9f35", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/1690ee1728827f9deb4b60457fa387cf44672c56", + "reference": "1690ee1728827f9deb4b60457fa387cf44672c56", "shasum": "" }, "require": { - "php": "^8", + "php": "^8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4|^5|^6|^7" + "symfony/var-dumper": "^5.4|^6|^7|^8" }, "replace": { "maximebf/debugbar": "self.version" }, "require-dev": { - "dbrekelmans/bdi": "^1", - "phpunit/phpunit": "^8|^9", + "dbrekelmans/bdi": "^1.4", + "friendsofphp/php-cs-fixer": "^3.92", + "monolog/monolog": "^3.9", + "php-debugbar/doctrine-bridge": "^3@dev", + "php-debugbar/monolog-bridge": "^1@dev", + "php-debugbar/symfony-bridge": "^1@dev", + "php-debugbar/twig-bridge": "^2@dev", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^10", + "predis/predis": "^3.3", + "shipmonk/phpstan-rules": "^4.3", + "symfony/browser-kit": "^6.4|7.0", + "symfony/dom-crawler": "^6.4|^7", + "symfony/event-dispatcher": "^5.4|^6.4|^7.3|^8.0", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8.0", + "symfony/mailer": "^5.4|^6.4|^7.3|^8.0", "symfony/panther": "^1|^2.1", - "twig/twig": "^1.38|^2.7|^3.0" + "twig/twig": "^3.11.2" }, "suggest": { - "kriswallsmith/assetic": "The best way to manage assets", - "monolog/monolog": "Log using Monolog", - "predis/predis": "Redis storage" + "php-debugbar/doctrine-bridge": "To integrate Doctrine with php-debugbar.", + "php-debugbar/monolog-bridge": "To integrate Monolog with php-debugbar.", + "php-debugbar/symfony-bridge": "To integrate Symfony with php-debugbar.", + "php-debugbar/twig-bridge": "To integrate Twig with php-debugbar." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { "psr-4": { - "DebugBar\\": "src/DebugBar/" + "DebugBar\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -11801,462 +10837,204 @@ "description": "Debug bar in the browser for php application", "homepage": "https://github.com/php-debugbar/php-debugbar", "keywords": [ - "debug", - "debug bar", - "debugbar", - "dev" - ], - "support": { - "issues": "https://github.com/php-debugbar/php-debugbar/issues", - "source": "https://github.com/php-debugbar/php-debugbar/tree/v2.2.4" - }, - "time": "2025-07-22T14:01:30+00:00" - }, - { - "name": "php-webdriver/webdriver", - "version": "1.15.2", - "source": { - "type": "git", - "url": "https://github.com/php-webdriver/php-webdriver.git", - "reference": "998e499b786805568deaf8cbf06f4044f05d91bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/998e499b786805568deaf8cbf06f4044f05d91bf", - "reference": "998e499b786805568deaf8cbf06f4044f05d91bf", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-zip": "*", - "php": "^7.3 || ^8.0", - "symfony/polyfill-mbstring": "^1.12", - "symfony/process": "^5.0 || ^6.0 || ^7.0" - }, - "replace": { - "facebook/webdriver": "*" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.20.0", - "ondram/ci-detector": "^4.0", - "php-coveralls/php-coveralls": "^2.4", - "php-mock/php-mock-phpunit": "^2.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "^3.5", - "symfony/var-dumper": "^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" - }, - "type": "library", - "autoload": { - "files": [ - "lib/Exception/TimeoutException.php" - ], - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.", - "homepage": "https://github.com/php-webdriver/php-webdriver", - "keywords": [ - "Chromedriver", - "geckodriver", - "php", - "selenium", - "webdriver" - ], - "support": { - "issues": "https://github.com/php-webdriver/php-webdriver/issues", - "source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.2" - }, - "time": "2024-11-21T15:12:59+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.32", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-text-template": "^2.0.4", - "sebastian/code-unit-reverse-lookup": "^2.0.3", - "sebastian/complexity": "^2.0.3", - "sebastian/environment": "^5.1.5", - "sebastian/lines-of-code": "^1.0.4", - "sebastian/version": "^3.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-22T04:23:01+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" + "debug", + "debug bar", + "debugbar", + "dev", + "profiler", + "toolbar" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.7.6" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2026-04-30T07:31:44+00:00" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", + "name": "php-debugbar/symfony-bridge", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "url": "https://github.com/php-debugbar/symfony-bridge.git", + "reference": "e37d2debe5d316408b00d0ab2688d9c2cf59b5ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/php-debugbar/symfony-bridge/zipball/e37d2debe5d316408b00d0ab2688d9c2cf59b5ad", + "reference": "e37d2debe5d316408b00d0ab2688d9c2cf59b5ad", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^8.2", + "php-debugbar/php-debugbar": "^3.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "dbrekelmans/bdi": "^1.4", + "phpunit/phpunit": "^10", + "symfony/browser-kit": "^6|^7", + "symfony/dom-crawler": "^6|^7", + "symfony/mailer": "^5.4|^6.4|^7.3|^8.0", + "symfony/panther": "^1|^2.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "DebugBar\\Bridge\\Symfony\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Symfony bridge for PHP Debugbar", + "homepage": "https://github.com/php-debugbar/php-debugbar", "keywords": [ - "template" + "debugbar", + "dev", + "symfony" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "issues": "https://github.com/php-debugbar/symfony-bridge/issues", + "source": "https://github.com/php-debugbar/symfony-bridge/tree/v1.1.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2026-01-15T14:47:34+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", + "name": "php-webdriver/webdriver", + "version": "1.16.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "url": "https://github.com/php-webdriver/php-webdriver.git", + "reference": "ac0662863aa120b4f645869f584013e4c4dba46a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/ac0662863aa120b4f645869f584013e4c4dba46a", + "reference": "ac0662863aa120b4f645869f584013e4c4dba46a", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-curl": "*", + "ext-json": "*", + "ext-zip": "*", + "php": "^7.3 || ^8.0", + "symfony/polyfill-mbstring": "^1.12", + "symfony/process": "^5.0 || ^6.0 || ^7.0 || ^8.0" + }, + "replace": { + "facebook/webdriver": "*" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ergebnis/composer-normalize": "^2.20.0", + "ondram/ci-detector": "^4.0", + "php-coveralls/php-coveralls": "^2.4", + "php-mock/php-mock-phpunit": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "^3.5", + "symfony/var-dumper": "^5.0 || ^6.0 || ^7.0 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } + "suggest": { + "ext-simplexml": "For Firefox profile creation" }, + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "lib/Exception/TimeoutException.php" + ], + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "MIT" ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.", + "homepage": "https://github.com/php-webdriver/php-webdriver", "keywords": [ - "timer" + "Chromedriver", + "geckodriver", + "php", + "selenium", + "webdriver" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "issues": "https://github.com/php-webdriver/php-webdriver/issues", + "source": "https://github.com/php-webdriver/php-webdriver/tree/1.16.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2025-12-28T23:57:40+00:00" }, { - "name": "phpunit/phpunit", - "version": "9.6.25", + "name": "phpunit/php-code-coverage", + "version": "10.1.16", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "049c011e01be805202d8eebedef49f769a8ec7b7" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/049c011e01be805202d8eebedef49f769a8ec7b7", - "reference": "049c011e01be805202d8eebedef49f769a8ec7b7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", - "ext-json": "*", "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.32", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.4", - "phpunit/php-timer": "^5.0.3", - "sebastian/cli-parser": "^1.0.2", - "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.9", - "sebastian/diff": "^4.0.6", - "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.8", - "sebastian/object-enumerator": "^4.0.4", - "sebastian/resource-operations": "^3.0.4", - "sebastian/type": "^3.2.1", - "sebastian/version": "^3.0.2" + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-pcov": "PHP extension that provides line coverage", "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], "classmap": [ "src/" ] @@ -12272,357 +11050,402 @@ "role": "lead" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "phpunit", + "coverage", "testing", "xunit" ], "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.25" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" } ], - "time": "2025-08-20T14:38:31+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { - "name": "psr/http-server-handler", - "version": "1.0.2", + "name": "phpunit/php-file-iterator", + "version": "4.1.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-server-handler.git", - "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4", - "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.0", - "psr/http-message": "^1.0 || ^2.0" + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Http\\Server\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for HTTP server-side request handler", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "handler", - "http", - "http-interop", - "psr", - "psr-15", - "psr-7", - "request", - "response", - "server" + "filesystem", + "iterator" ], "support": { - "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, - "time": "2023-04-10T20:06:20+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" }, { - "name": "psr/http-server-middleware", - "version": "1.0.2", + "name": "phpunit/php-invoker", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-server-middleware.git", - "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829", - "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.0", - "psr/http-message": "^1.0 || ^2.0", - "psr/http-server-handler": "^1.0" + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Http\\Server\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for HTTP server-side middleware", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "http", - "http-interop", - "middleware", - "psr", - "psr-15", - "psr-7", - "request", - "response" + "process" ], "support": { - "issues": "https://github.com/php-fig/http-server-middleware/issues", - "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, - "time": "2023-04-11T06:14:47+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" }, { - "name": "respect/stringifier", - "version": "0.2.0", + "name": "phpunit/php-text-template", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/Respect/Stringifier.git", - "reference": "e55af3c8aeaeaa2abb5fa47a58a8e9688cc23b59" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Respect/Stringifier/zipball/e55af3c8aeaeaa2abb5fa47a58a8e9688cc23b59", - "reference": "e55af3c8aeaeaa2abb5fa47a58a8e9688cc23b59", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.8", - "malukenho/docheader": "^0.1.7", - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "files": [ - "src/stringify.php" - ], - "psr-4": { - "Respect\\Stringifier\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Respect/Stringifier Contributors", - "homepage": "https://github.com/Respect/Stringifier/graphs/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Converts any value to a string", - "homepage": "http://respect.github.io/Stringifier/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "respect", - "stringifier", - "stringify" + "template" ], "support": { - "issues": "https://github.com/Respect/Stringifier/issues", - "source": "https://github.com/Respect/Stringifier/tree/0.2.0" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, - "time": "2017-12-29T19:39:25+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" }, { - "name": "respect/validation", - "version": "2.4.4", + "name": "phpunit/php-timer", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/Respect/Validation.git", - "reference": "f13f10f19978aea33af2a102a2f58f2db1e63619" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Respect/Validation/zipball/f13f10f19978aea33af2a102a2f58f2db1e63619", - "reference": "f13f10f19978aea33af2a102a2f58f2db1e63619", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=8.1", - "respect/stringifier": "^0.2.0", - "symfony/polyfill-mbstring": "^1.2" + "php": ">=8.1" }, "require-dev": { - "egulias/email-validator": "^3.0", - "giggsey/libphonenumber-for-php-lite": "^8.13 || ^9.0", - "malukenho/docheader": "^1.0", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.6", - "psr/http-message": "^1.0", - "respect/coding-standard": "^4.0", - "squizlabs/php_codesniffer": "^3.7" - }, - "suggest": { - "egulias/email-validator": "Improves the Email rule if available", - "ext-bcmath": "Arbitrary Precision Mathematics", - "ext-fileinfo": "File Information", - "ext-mbstring": "Multibyte String Functions", - "giggsey/libphonenumber-for-php-lite": "Enables the phone rule if available" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "Respect\\Validation\\": "library/" + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Respect/Validation Contributors", - "homepage": "https://github.com/Respect/Validation/graphs/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "The most awesome validation engine ever created for PHP", - "homepage": "http://respect.github.io/Validation/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "respect", - "validation", - "validator" + "timer" ], "support": { - "issues": "https://github.com/Respect/Validation/issues", - "source": "https://github.com/Respect/Validation/tree/2.4.4" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, - "time": "2025-06-07T00:07:21+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" }, { - "name": "riverline/multipart-parser", - "version": "2.2.0", + "name": "phpunit/phpunit", + "version": "10.5.63", "source": { "type": "git", - "url": "https://github.com/Riverline/multipart-parser.git", - "reference": "1410f23a8fd416a0cf5c8867ea9c95544016c831" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "33198268dad71e926626b618f3ec3966661e4d90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Riverline/multipart-parser/zipball/1410f23a8fd416a0cf5c8867ea9c95544016c831", - "reference": "1410f23a8fd416a0cf5c8867ea9c95544016c831", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", + "reference": "33198268dad71e926626b618f3ec3966661e4d90", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", "ext-mbstring": "*", - "php": ">=5.6.0" + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.5", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.4", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, - "require-dev": { - "laminas/laminas-diactoros": "^1.8.7 || ^2.11.1", - "phpunit/phpunit": "^5.7 || ^9.0", - "psr/http-message": "^1.0", - "symfony/psr-http-message-bridge": "^1.1 || ^2.0" + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" }, + "bin": [ + "phpunit" + ], "type": "library", - "autoload": { - "psr-4": { - "Riverline\\MultiPartParser\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" } }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Romain Cambien", - "email": "romain@cambien.net" - }, - { - "name": "Riverline", - "homepage": "http://www.riverline.fr" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "One class library to parse multipart content with encoding and charset support.", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "http", - "multipart", - "parser" + "phpunit", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/Riverline/multipart-parser/issues", - "source": "https://github.com/Riverline/multipart-parser/tree/2.2.0" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63" }, - "time": "2025-04-29T08:38:14+00:00" + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-01-27T05:48:37+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -12645,7 +11468,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -12653,32 +11477,32 @@ "type": "github" } ], - "time": "2024-03-02T06:27:43+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -12701,7 +11525,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -12709,32 +11533,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -12756,7 +11580,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -12764,34 +11588,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.9", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5" + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/67a2df3a62639eab2cc5906065e9805d4fd5dfc5", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -12830,7 +11656,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.9" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" }, "funding": [ { @@ -12850,33 +11677,33 @@ "type": "tidelift" } ], - "time": "2025-08-10T06:51:50+00:00" + "time": "2026-01-24T09:25:16+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -12899,7 +11726,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -12907,33 +11735,33 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.6", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -12965,7 +11793,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -12973,27 +11802,27 @@ "type": "github" } ], - "time": "2024-03-02T06:30:58+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -13001,7 +11830,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -13020,7 +11849,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -13028,7 +11857,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -13036,34 +11866,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.6", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -13105,46 +11935,56 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T06:33:00+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.8", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b6781316bdcd28260904e7cc18ec983d0d2ef4f6", - "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -13163,59 +12003,48 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.8" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", - "type": "tidelift" } ], - "time": "2025-08-10T07:10:35+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -13238,7 +12067,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -13246,34 +12076,34 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -13295,7 +12125,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -13303,32 +12133,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -13350,7 +12180,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -13358,32 +12188,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.6", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "539c6691e0623af6dc6f9c20384c120f963465a0" + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0", - "reference": "539c6691e0623af6dc6f9c20384c120f963465a0", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -13413,7 +12243,8 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" }, "funding": [ { @@ -13433,86 +12264,32 @@ "type": "tidelift" } ], - "time": "2025-08-10T06:57:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-14T16:00:52+00:00" + "time": "2025-08-10T07:50:56+00:00" }, { "name": "sebastian/type", - "version": "3.2.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -13535,7 +12312,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -13543,29 +12320,29 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -13588,7 +12365,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -13596,20 +12373,20 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { "name": "spatie/backtrace", - "version": "1.8.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110" + "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/8c0f16a59ae35ec8c62d85c3c17585158f430110", - "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/8ffe78be5ed355b5009e3dd989d183433e9a5adc", + "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc", "shasum": "" }, "require": { @@ -13620,7 +12397,7 @@ "laravel/serializable-closure": "^1.3 || ^2.0", "phpunit/phpunit": "^9.3 || ^11.4.3", "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", - "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" + "symfony/var-dumper": "^5.1|^6.0|^7.0|^8.0" }, "type": "library", "autoload": { @@ -13648,7 +12425,7 @@ ], "support": { "issues": "https://github.com/spatie/backtrace/issues", - "source": "https://github.com/spatie/backtrace/tree/1.8.1" + "source": "https://github.com/spatie/backtrace/tree/1.8.2" }, "funding": [ { @@ -13660,7 +12437,7 @@ "type": "other" } ], - "time": "2025-08-26T08:22:30+00:00" + "time": "2026-03-11T13:48:28+00:00" }, { "name": "spatie/error-solutions", @@ -13738,26 +12515,26 @@ }, { "name": "spatie/flare-client-php", - "version": "1.10.1", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" + "reference": "53f41b08a27cc039e1a8ed2be9a202e924f31bad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", - "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/53f41b08a27cc039e1a8ed2be9a202e924f31bad", + "reference": "53f41b08a27cc039e1a8ed2be9a202e924f31bad", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "php": "^8.0", "spatie/backtrace": "^1.6.1", - "symfony/http-foundation": "^5.2|^6.0|^7.0", - "symfony/mime": "^5.2|^6.0|^7.0", - "symfony/process": "^5.2|^6.0|^7.0", - "symfony/var-dumper": "^5.2|^6.0|^7.0" + "symfony/http-foundation": "^5.2|^6.0|^7.0|^8.0", + "symfony/mime": "^5.2|^6.0|^7.0|^8.0", + "symfony/process": "^5.2|^6.0|^7.0|^8.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0|^8.0" }, "require-dev": { "dms/phpunit-arraysubset-asserts": "^0.5.0", @@ -13795,7 +12572,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" + "source": "https://github.com/spatie/flare-client-php/tree/1.11.1" }, "funding": [ { @@ -13803,41 +12580,44 @@ "type": "github" } ], - "time": "2025-02-14T13:42:06+00:00" + "time": "2026-05-15T09:31:32+00:00" }, { "name": "spatie/ignition", - "version": "1.15.1", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "31f314153020aee5af3537e507fef892ffbf8c85" + "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", - "reference": "31f314153020aee5af3537e507fef892ffbf8c85", + "url": "https://api.github.com/repos/spatie/ignition/zipball/b59385bb7aa24dae81bcc15850ebecfda7b40838", + "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", "php": "^8.0", - "spatie/error-solutions": "^1.0", - "spatie/flare-client-php": "^1.7", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "spatie/backtrace": "^1.7.1", + "spatie/error-solutions": "^1.1.2", + "spatie/flare-client-php": "^1.9", + "symfony/console": "^5.4.42|^6.0|^7.0|^8.0", + "symfony/http-foundation": "^5.4.42|^6.0|^7.0|^8.0", + "symfony/mime": "^5.4.42|^6.0|^7.0|^8.0", + "symfony/var-dumper": "^5.4.42|^6.0|^7.0|^8.0" }, "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", + "illuminate/cache": "^9.52|^10.0|^11.0|^12.0|^13.0", "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20|^2.0", + "pestphp/pest": "^1.20|^2.0|^3.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "psr/simple-cache-implementation": "*", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", + "symfony/cache": "^5.4.38|^6.0|^7.0|^8.0", + "symfony/process": "^5.4.35|^6.0|^7.0|^8.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -13886,42 +12666,43 @@ "type": "github" } ], - "time": "2025-02-21T14:31:39+00:00" + "time": "2026-03-17T10:51:08+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.9.1", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a" + "reference": "45b3b6e1e73fc161cba2149972698644b99594ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/45b3b6e1e73fc161cba2149972698644b99594ee", + "reference": "45b3b6e1e73fc161cba2149972698644b99594ee", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0|^12.0", - "php": "^8.1", - "spatie/ignition": "^1.15", - "symfony/console": "^6.2.3|^7.0", - "symfony/var-dumper": "^6.2.3|^7.0" - }, - "require-dev": { - "livewire/livewire": "^2.11|^3.3.5", - "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1|^0.10", - "orchestra/testbench": "8.22.3|^9.0|^10.0", - "pestphp/pest": "^2.34|^3.7", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", - "phpstan/phpstan-phpunit": "^1.3.16|^2.0", - "vlucas/phpdotenv": "^5.5" + "illuminate/support": "^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.72|^3.0", + "php": "^8.2", + "spatie/ignition": "^1.16", + "symfony/console": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" + }, + "require-dev": { + "livewire/livewire": "^3.7.0|^4.0|dev-josh/v3-laravel-13-support", + "mockery/mockery": "^1.6.12", + "openai-php/client": "^0.10.3|^0.19", + "orchestra/testbench": "^v9.16.0|^10.6|^11.0", + "pestphp/pest": "^3.7|^4.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan-deprecation-rules": "^2.0.3", + "phpstan/phpstan-phpunit": "^2.0.8", + "vlucas/phpdotenv": "^5.6.2" }, "suggest": { "openai-php/client": "Require get solutions from OpenAI", @@ -13977,7 +12758,7 @@ "type": "github" } ], - "time": "2025-02-20T13:13:55+00:00" + "time": "2026-03-17T12:20:04+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -14065,26 +12846,27 @@ }, { "name": "symfony/dom-crawler", - "version": "v6.4.25", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "976302990f9f2a6d4c07206836dd4ca77cae9524" + "reference": "2918e7c2ba964defca1f5b69c6f74886529e2dc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/976302990f9f2a6d4c07206836dd4ca77cae9524", - "reference": "976302990f9f2a6d4c07206836dd4ca77cae9524", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2918e7c2ba964defca1f5b69c6f74886529e2dc8", + "reference": "2918e7c2ba964defca1f5b69c6f74886529e2dc8", "shasum": "" }, "require": { "masterminds/html5": "^2.6", - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0|^7.0" + "symfony/css-selector": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -14112,7 +12894,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.25" + "source": "https://github.com/symfony/dom-crawler/tree/v7.4.8" }, "funding": [ { @@ -14132,20 +12914,20 @@ "type": "tidelift" } ], - "time": "2025-08-05T18:56:08+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -14174,7 +12956,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -14182,7 +12964,7 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], @@ -14193,7 +12975,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.1" + "php": "^8.3" }, "platform-dev": {}, "plugin-api-version": "2.9.0" diff --git a/config/audit.php b/config/audit.php index 30062072c1..701eb40c1d 100644 --- a/config/audit.php +++ b/config/audit.php @@ -40,6 +40,7 @@ 'web', 'api', ], + 'resolver' => OwenIt\Auditing\Resolvers\UserResolver::class, ], /* @@ -47,11 +48,10 @@ | Audit Resolvers |-------------------------------------------------------------------------- | - | Define the User, IP Address, User Agent and URL resolver implementations. + | Define the IP Address, User Agent and URL resolver implementations. | */ - 'resolver' => [ - 'user' => OwenIt\Auditing\Resolvers\UserResolver::class, + 'resolvers' => [ 'ip_address' => OwenIt\Auditing\Resolvers\IpAddressResolver::class, 'user_agent' => OwenIt\Auditing\Resolvers\UserAgentResolver::class, 'url' => OwenIt\Auditing\Resolvers\UrlResolver::class, diff --git a/config/geocoder.php b/config/geocoder.php index 2e65da6ba4..436c725380 100644 --- a/config/geocoder.php +++ b/config/geocoder.php @@ -1,9 +1,9 @@ [ @@ -36,6 +36,8 @@ */ 'duration' => 9999999, + + 'auto_register_serializable_classes' => true, ], /* @@ -78,7 +80,7 @@ | Default: Client::class (FQCN for CURL adapter) | */ - 'adapter' => Client::class, + 'adapter' => LaravelHttpClient::class, /* |--------------------------------------------------------------------------- diff --git a/config/sentry.php b/config/sentry.php index 068dbfa30e..dea6f0e8eb 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -54,14 +54,6 @@ 'controllers_base_namespace' => env('SENTRY_CONTROLLERS_BASE_NAMESPACE', 'App\\Http\\Controllers'), - 'before_send' => function (\Sentry\Event $event, ?\Sentry\EventHint $hint): ?\Sentry\Event { - if ($hint !== null && $hint->exception !== null && str_contains($hint->exception->getMessage(), 'Could not reach the remote Mailgun server')) { - // This can happen if Mailgun is not available. We send emails using queues, and therefore we will - // retry. So we don't need to log the error to Sentry. - return null; - } - - return $event; - }, + 'before_send' => \App\Support\SentryBeforeSend::class . '::handle', ]; diff --git a/database/migrations/2021_06_09_164834_no_null_problems.php b/database/migrations/2021_06_09_164834_no_null_problems.php index 4ef02511f3..41eb76f1fe 100644 --- a/database/migrations/2021_06_09_164834_no_null_problems.php +++ b/database/migrations/2021_06_09_164834_no_null_problems.php @@ -11,9 +11,6 @@ */ public function up(): void { - // See https://github.com/doctrine/dbal/issues/3161. - DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); - Schema::table('devices', function (Blueprint $table) { $table->mediumText('problem')->nullable(false)->change(); }); @@ -24,8 +21,6 @@ public function up(): void */ public function down(): void { - DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); - Schema::table('devices', function (Blueprint $table) { $table->mediumText('problem')->nullable(true)->change(); }); diff --git a/database/migrations/2024_11_25_124911_group_image.php b/database/migrations/2024_11_25_124911_group_image.php new file mode 100644 index 0000000000..39f80c6641 --- /dev/null +++ b/database/migrations/2024_11_25_124911_group_image.php @@ -0,0 +1,43 @@ +string('image', 255)->nullable(); + }); + + $groups = Group::all(); + + foreach ($groups as $group) { + $group_image = $group->groupImage; + + $group->image = (is_object($group_image) && is_object($group_image->image)) ? + $group_image->image->path : null; + $group->save(); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('groups', function (Blueprint $table) { + $table->dropColumn('image'); + }); + } +}; diff --git a/database/migrations/2026_05_13_000001_recreate_repair_status_triggers.php b/database/migrations/2026_05_13_000001_recreate_repair_status_triggers.php index 3b2b121923..6fb1b258a7 100644 --- a/database/migrations/2026_05_13_000001_recreate_repair_status_triggers.php +++ b/database/migrations/2026_05_13_000001_recreate_repair_status_triggers.php @@ -6,6 +6,15 @@ { public function up(): void { + // MySQL 8.0 with binary logging enabled blocks CREATE TRIGGER for non-SUPER + // users unless this flag is set. Best-effort: if we don't have SUPER the + // server my.cnf must already have it (e.g. production's custom.cnf). + try { + DB::statement('SET GLOBAL log_bin_trust_function_creators = 1'); + } catch (\Exception $e) { + // No SUPER privilege — rely on server-side configuration. + } + // The 2025_01_08 migration dropped these triggers to fix Docker Compose // test permissions. Without them, repair_status_str is always 'Unknown' // for new/updated devices. Recreate them here. diff --git a/docker_run.sh b/docker_run.sh index 9279fd9b7f..becca7768f 100755 --- a/docker_run.sh +++ b/docker_run.sh @@ -6,13 +6,22 @@ USER_ID=${UID:-1000} GROUP_ID=${GID:-1000} +# Timestamp logging for CI diagnostics +log_step() { + echo "[$(date '+%H:%M:%S')] $1" +} + +log_step "docker_run.sh started" + if [ ! -f .env ] then cp .env.example .env fi rm -rf vendor +log_step "Starting composer install" composer install +log_step "composer install done" # Point at the DB server sed -i 's/DB_HOST=.*$/DB_HOST=restarters_db/g' .env @@ -74,25 +83,21 @@ done # Wait for MySQL database to be ready before running migrations wait_for_service "MySQL database" "mysqladmin ping -h restarters_db --skip-ssl --silent" 60 5 +log_step "Starting migrate:fresh --seed" php artisan migrate:fresh --seed -npm install --legacy-peer-deps -npm rebuild node-sass +log_step "migrate:fresh --seed done" -# Install Playwright for testing (system deps already in Dockerfile) -npm install -D @playwright/test -npx playwright install - -# Start Vite dev server in the background with logging -echo "Starting Vite dev server..." -nohup npm run dev > /tmp/vite.log 2>&1 & -echo "Vite dev server started with PID $!" +# npm install, node-sass rebuild, Playwright browser download, and Vite are slow +# (network-dependent) and not needed for PHP-FPM to serve HTTP. Run them in the +# background so php-fpm can start immediately after migrations. +(npm install --legacy-peer-deps && npm rebuild node-sass && nohup npm run dev > /tmp/vite.log 2>&1) & +(npm install -D @playwright/test && npx playwright install) & +log_step "Starting artisan setup commands" php artisan key:generate php artisan cache:clear php artisan config:clear - -# Generate OpenAPI documentation needed for tests -php artisan l5-swagger:generate +log_step "artisan setup commands done" # Ensure we have the admin user echo "User::firstOrCreate(['email'=>'jane@bloggs.net'], ['name'=>'Jane Bloggs','password'=>Hash::make('passw0rd'),'role'=>2,'consent_past_data'=>'2021-01-01','consent_future_data'=>'2021-01-01','consent_gdpr'=>'2021-01-01']);" | php artisan tinker @@ -100,7 +105,9 @@ echo "User::firstOrCreate(['email'=>'jane@bloggs.net'], ['name'=>'Jane Bloggs',' # Ensure we have a test group tag echo "\App\GroupTags::firstOrCreate(['tag_name'=>'Test Tag'], ['description'=>'A test tag for development']);" | php artisan tinker +log_step "Starting php-fpm" +# Start php-fpm — this is what serves HTTP, everything above just needs to be done first. +# npm/playwright continue in background; they'll be ready long before Playwright tests run. +# Note: l5-swagger:generate is intentionally omitted here — CI runs it in "Setup application" after +# "Wait for services" passes, so it's redundant here and would only slow startup. php-fpm - -# In case everything else bombs out. -sleep infinity diff --git a/jest.config.json b/jest.config.json index 92ccff1a17..3bec585c1c 100644 --- a/jest.config.json +++ b/jest.config.json @@ -12,7 +12,8 @@ }, "roots": [ "/resources/js/components", - "/resources/js/misc" + "/resources/js/misc", + "/resources/js/store" ], "modulePaths": [ "" @@ -23,6 +24,8 @@ "setupFilesAfterEnv": ["/tests/jest.setup.js"], "testEnvironment": "jsdom", "moduleNameMapper": { - "^resources/js/mixins/lang.js$": "/tests/__mocks__/resources/js/mixins/lang.js" + "^resources/js/mixins/lang.js$": "/tests/__mocks__/resources/js/mixins/lang.js", + "^leaflet-control-geocoder/.*$": "/tests/__mocks__/leaflet-control-geocoder.js", + "^vue-awesome/.*$": "/tests/__mocks__/vue-awesome.js" } } \ No newline at end of file diff --git a/lang/de/groups.php b/lang/de/groups.php index 1629d89db6..cea5df597e 100644 --- a/lang/de/groups.php +++ b/lang/de/groups.php @@ -3,8 +3,6 @@ return [ 'group' => 'Group', 'groups' => 'Groups', - 'all_groups' => 'All groups', - 'search_name' => 'Search name', 'add_groups' => 'Add a group', 'add_groups_content' => 'Tell us more about your group, so we can create a page for you and help you publicise to potential volunteers and participants.', 'create_groups' => 'Create new group', diff --git a/lang/en/groups.php b/lang/en/groups.php index 4071759763..ceed335efb 100644 --- a/lang/en/groups.php +++ b/lang/en/groups.php @@ -5,16 +5,14 @@ 'headline_stats_dropdown' => 'Headline stats', 'co2_equivalence_visualisation_dropdown' => 'CO2 equivalence visualisation', 'group_admin_only' => 'Admin only', - 'search_name' => 'Search name', 'group' => 'Group', 'groups' => 'Groups', - 'all_groups' => 'All Groups', 'add_groups' => 'Add a group', 'add_groups_content' => 'Tell us more about your group, so we can create a page for you and help you publicise to potential volunteers and participants.', 'create_groups' => 'Add a new group', 'create_group' => 'Create group', 'groups_title1' => 'Your Groups', - 'groups_title2' => 'Other groups nearby', + 'groups_title2' => 'Other groups', 'groups_name' => 'Name', 'groups_name_of' => 'Name of group', 'groups_about_group' => 'Tell us about your group', @@ -104,7 +102,6 @@ 'repairable_items' => 'Repairable items', 'end_of_life_items' => 'End-of-life items', 'no_unpowered_stats' => 'At the moment, these stats are only displayed for powered items. We hope to include unpowered items soon.', - 'all_groups_mobile' => 'All', 'create_groups_mobile2' => 'Add new', 'groups_title1_mobile' => 'Yours', 'groups_title2_mobile' => 'Nearest', @@ -112,13 +109,13 @@ 'no_groups_mine' => 'If you can\'t see any here yet, why not follow your nearest group to hear about their upcoming repair events?', 'no_groups_nearest_no_location' => '

You do not currently have a town/city set. You can set one in your profile.

You can also view all groups.

', 'no_groups_nearest_with_location' => '

There are no groups within 50 km of your location. You can see all groups here. Or why not start your own? Learn what running your own repair event involves.

', - 'group_count' => 'There is :count group.|There are :count groups.', - 'search_name_placeholder' => 'Search name...', - 'search_location_placeholder' => 'Search location...', - 'search_country_placeholder' => 'Country...', - 'search_tags_placeholder' => 'Tag', - 'show_filters' => 'Show Filters', - 'hide_filters' => 'Hide Filters', + 'group_count' => 'There is :count group. Zoom out to see more.|There are :count groups. Zoom out to see more.', + 'search_name_placeholder' => 'Search by name', + 'search_location_placeholder' => 'Search by location', + 'search_country_placeholder' => 'Filter by country', + 'search_tags_placeholder' => 'Filter by tags', + 'show_filters' => 'Show filters', + 'hide_filters' => 'Hide filters', 'leave_group_button' => 'Unfollow group', 'leave_group_button_mobile' => 'Unfollow', 'leave_group_confirm' => 'Please confirm that you want to unfollow this group.', @@ -141,7 +138,6 @@ 'archive_group_confirm' => 'Please confirm that you want to archive :name.', 'delete_succeeded' => 'Group :name has been deleted.', 'nearest_groups' => 'These are the groups that are within 50 km of :location', - 'nearest_groups_change' => '(change)', 'invitation_pending' => 'You have an invitation to this group. Please click here if you would like to join.', 'geocode_failed' => 'Location not found. If you are unable to find the location of your group, please try a more general location (such as village/town), or a specific street address, rather than a building name.', 'discourse_title' => 'This is a discussion group for anyone who follows :group. @@ -180,4 +176,7 @@ 'export.events.items_end_of_life' => 'Items end-of-life', 'export.events.items_kg_waste_prevented' => 'kg waste prevented', 'export.events.items_kg_co2_prevent' => 'kg CO2 prevented', + 'marker_title' => 'Click for more information', + 'goto_group' => 'Go to group', + 'next_event' => 'Next event', ]; diff --git a/lang/en/networks.php b/lang/en/networks.php index e3b20c0207..e0e1f4f27f 100644 --- a/lang/en/networks.php +++ b/lang/en/networks.php @@ -53,8 +53,6 @@ 'add_groups_warning_none_selected' => 'No groups selected.', 'add_groups_success' => '{1} :number group added.|[2,*] :number groups added.', 'view_groups_menuitem' => 'View groups', - 'groups_count' => '{0} There are currently no groups in the :name network.|{1} There is currently :count group in the :name network.|[2,*] There are currently :count groups in the :name network.', - 'view_groups_link' => 'View these groups.', 'none' => 'None', ], 'edit' => [ diff --git a/lang/fr-BE/groups.php b/lang/fr-BE/groups.php index 23b1d9e0cc..1b50fded48 100644 --- a/lang/fr-BE/groups.php +++ b/lang/fr-BE/groups.php @@ -4,13 +4,12 @@ 'group' => 'Repair Café', 'groups' => 'Repair Cafés', 'all_groups' => 'Tous les Repair Cafés', - 'search_name' => 'Chercher nom', 'add_groups' => 'Ajouter un nouveau Repair Café', 'add_groups_content' => 'Dites-en nous plus sur votre repair café, afin que nous puissions vous créer une page et vous aider à trouver de potentiels nouveaux bénévoles et participants', 'create_groups' => 'Créer nouveau Repair Café', 'create_group' => 'Créer un nouveau Repair Café', 'groups_title1' => 'Vos Repair Cafés', - 'groups_title2' => 'Repair Cafés proches de chez vous', + 'groups_title2' => 'Autres Repair Cafés', 'groups_name' => 'Nom', 'groups_name_of' => 'Nom du Repair Café', 'groups_about_group' => 'Parlez-nous de votre Repair Café', @@ -105,12 +104,16 @@ 'volunteers_attended' => 'Bénévoles ayant participé', 'volunteers_confirmed' => 'Bénévoles confirmés', 'volunteers_invited' => 'Bénévoles invités', - 'all_groups_mobile' => 'Tous', 'create_groups_mobile2' => 'Ajouter nouveau', 'groups_title1_mobile' => 'Le vôtre', 'groups_title2_mobile' => 'Le plus proche', - 'group_count' => 'Il y a :count Repair Café. Il y a :count Repair Cafés.', - 'hide_filters' => 'Cacher les filtres', + 'group_count' => 'Il y a :count Repair Café. Zoom arrière pour en voir plus.|Il y a :count Repair Cafés. Zoom arrière pour en voir plus.', + 'search_name_placeholder' => 'Rechercher par nom', + 'search_location_placeholder' => 'Rechercher par lieu', + 'search_country_placeholder' => 'Filtrer par pays', + 'search_tags_placeholder' => 'Filtrer par étiquettes', + 'show_filters' => 'Afficher les filtres', + 'hide_filters' => 'Masquer les filtres', 'join_group_button_mobile' => 'Suivre', 'leave_group_button' => 'Ne plus suivre ce Repair Café', 'leave_group_button_mobile' => 'Ne plus suivre', @@ -121,11 +124,6 @@ 'no_groups_nearest_no_location' => '

Vous n\'avez pas défini de village/ville. Vous pouvez en ajouter un.e dans votre profil.

Vous pouvez aussi voir tous les Repair Cafés.

', 'no_groups_nearest_with_location' => '

Il n\'y a apparemment pas encore de Repair Cafés listé proche de chez vous.

Voulez-vous créer ou ajouter un Repair Café? Regardez comment faire dans nos ressources.

', 'no_unpowered_stats' => 'Pour l\'instant, ces statistiques sont seulement affichées pour les appareils électriques. Nous espérons pouvoir inclure les appareils non-électriques sous peu.', - 'search_country_placeholder' => 'Pays', - 'search_location_placeholder' => 'Rechercher localisation...', - 'search_name_placeholder' => 'Rechercher nom...', - 'search_tags_placeholder' => 'Tag', - 'show_filters' => 'Montrer les filtres', 'all' => 'Tous', 'nearby' => 'Proche', 'no_other_events' => 'Il n\'y a actuellement aucun autre événement à venir', @@ -150,7 +148,6 @@ Apprenez à utiliser ce groupe ici : :help.', 'invitation_pending' => 'Vous avez une invitation à rejoindre ce Repair Café. Cliquez ici si vous voulez le rejoindre.', 'nearest_groups' => 'Ce sont les Repair Cafés qui se trouvent dans un rayon de 50km autour de :location', - 'nearest_groups_change' => '(change)', 'talk_group' => 'Voir la conversation de Repair Café', 'talk_group_add_title' => 'Bienvenue sur :group_name', 'editing' => 'Modification de', @@ -183,4 +180,7 @@ 'export.events.items_end_of_life' => 'Total des appareils en fin de vie', 'export.events.items_kg_waste_prevented' => 'kg déchets évités', 'export.events.items_kg_co2_prevent' => 'kg emissions de CO2 évitées', + 'marker_title' => 'Cliquez pour plus d\'informations', + 'goto_group' => 'Aller au Repair Café', + 'next_event' => 'Prochain événement', ]; diff --git a/lang/fr/groups.php b/lang/fr/groups.php index 5315fa74a7..69d1ab0dc7 100644 --- a/lang/fr/groups.php +++ b/lang/fr/groups.php @@ -4,13 +4,12 @@ 'group' => 'Repair Café', 'groups' => 'Repair Cafés', 'all_groups' => 'Tous les Repair Cafés', - 'search_name' => 'Chercher nom', 'add_groups' => 'Ajouter un nouveau Repair Café', 'add_groups_content' => 'Dites-en nous plus sur votre repair café, afin que nous puissions vous créer une page et vous aider à trouver de potentiels nouveaux bénévoles et participants', 'create_groups' => 'Créer nouveau Repair Café', 'create_group' => 'Créer un nouveau Repair Café', 'groups_title1' => 'Vos Repair Cafés', - 'groups_title2' => 'Repair Cafés proches de chez vous', + 'groups_title2' => 'Autres Repair Cafés', 'groups_name' => 'Nom', 'groups_name_of' => 'Nom du Repair Café', 'groups_about_group' => 'Parlez-nous de votre Repair Café', @@ -105,12 +104,16 @@ 'volunteers_attended' => 'Bénévoles ayant participé', 'volunteers_confirmed' => 'Bénévoles confirmés', 'volunteers_invited' => 'Bénévoles invités', - 'all_groups_mobile' => 'Tous', 'create_groups_mobile2' => 'Ajouter nouveau', 'groups_title1_mobile' => 'Le vôtre', 'groups_title2_mobile' => 'Le plus proche', - 'group_count' => 'Il y a :count Repair Café. Il y a :count Repair Cafés.', - 'hide_filters' => 'Cacher les filtres', + 'group_count' => 'Il y a :count Repair Café. Zoom arrière pour en voir plus.|Il y a :count Repair Cafés. Zoom arrière pour en voir plus.', + 'search_name_placeholder' => 'Rechercher par nom', + 'search_location_placeholder' => 'Rechercher par lieu', + 'search_country_placeholder' => 'Filtrer par pays', + 'search_tags_placeholder' => 'Filtrer par étiquettes', + 'show_filters' => 'Afficher les filtres', + 'hide_filters' => 'Masquer les filtres', 'join_group_button_mobile' => 'Suivre', 'leave_group_button' => 'Ne plus suivre ce Repair Café', 'leave_group_button_mobile' => 'Ne plus suivre', @@ -121,11 +124,6 @@ 'no_groups_nearest_no_location' => '

Vous n\'avez pas défini de village/ville. Vous pouvez en ajouter un.e dans votre profil.

Vous pouvez aussi voir tous les Repair Cafés.

', 'no_groups_nearest_with_location' => '

Il n\'y a apparemment pas encore de Repair Cafés listé proche de chez vous.

Voulez-vous créer ou ajouter un Repair Café? Regardez comment faire dans nos ressources.

', 'no_unpowered_stats' => 'Pour l\'instant, ces statistiques sont seulement affichées pour les appareils électriques. Nous espérons pouvoir inclure les appareils non-électriques sous peu.', - 'search_country_placeholder' => 'Pays', - 'search_location_placeholder' => 'Rechercher localisation...', - 'search_name_placeholder' => 'Rechercher nom...', - 'search_tags_placeholder' => 'Tag', - 'show_filters' => 'Montrer les filtres', 'all' => 'Tous', 'nearby' => 'Proche', 'no_other_events' => 'Il n\'y a actuellement aucun autre événement à venir', @@ -150,7 +148,6 @@ Apprenez à utiliser ce groupe ici : :help.', 'invitation_pending' => 'Vous avez une invitation à rejoindre ce Repair Café. Cliquez ici si vous voulez le rejoindre.', 'nearest_groups' => 'Ce sont les Repair Cafés qui se trouvent dans un rayon de 50km autour de :location', - 'nearest_groups_change' => '(change)', 'talk_group' => 'Voir la conversation de Repair Café', 'talk_group_add_title' => 'Bienvenue sur :group_name', 'editing' => 'Modification de', @@ -183,4 +180,7 @@ 'export.events.items_end_of_life' => 'Total des appareils en fin de vie', 'export.events.items_kg_waste_prevented' => 'kg déchets évités', 'export.events.items_kg_co2_prevent' => 'kg emissions de CO2 évitées', + 'marker_title' => 'Cliquez pour plus d\'informations', + 'goto_group' => 'Aller au Repair Café', + 'next_event' => 'Prochain événement', ]; diff --git a/lang/it/groups.php b/lang/it/groups.php index 2a453fcb60..df51cc1973 100644 --- a/lang/it/groups.php +++ b/lang/it/groups.php @@ -4,7 +4,6 @@ 'group' => 'Gruppo', 'groups' => 'Gruppi', 'all_groups' => 'Tutti i gruppi', - 'search_name' => 'Cerca nome', 'add_groups' => 'Aggiungi un gruppo', 'add_groups_content' => 'Raccontaci di più sul tuo gruppo, in modo che possiamo creare una pagina per te e aiutarti a trovare volontari e partecipanti.', 'create_groups' => 'Crea nuovo gruppo', diff --git a/lang/ne/groups.php b/lang/ne/groups.php index f8e5f293b3..f6d39cb800 100644 --- a/lang/ne/groups.php +++ b/lang/ne/groups.php @@ -41,7 +41,6 @@ 'message_example_text' => '', 'message_header' => 'Uitnodiging', 'restarter_column_table' => 'Restarter', - 'search_name' => 'Naam zoeken', 'send_invite_button' => 'Uitnodigingen versturen', 'share_stats_header' => 'Je statistieken delen', 'share_stats_message' => 'Door kapotte toestellen te repareren :group heel wat CO2 uitstoot en afval vermeden. Help ons om dit goede nieuws te verspreiden en deel het op je website.', diff --git a/lang/nl-BE/groups.php b/lang/nl-BE/groups.php index b2cd84bf21..ebebf12fd8 100644 --- a/lang/nl-BE/groups.php +++ b/lang/nl-BE/groups.php @@ -41,7 +41,6 @@ 'message_example_text' => '', 'message_header' => 'Uitnodiging', 'restarter_column_table' => 'Restarter', - 'search_name' => 'Naam zoeken', 'send_invite_button' => 'Uitnodigingen versturen', 'share_stats_header' => 'Je statistieken delen', 'share_stats_message' => 'Door kapotte toestellen te repareren heeft :group heel wat CO2 uitstoot en afval vermeden. Help ons om dit goede nieuws te verspreiden en deel het op je website.', diff --git a/lang/no/groups.php b/lang/no/groups.php index 2607fc6e1e..bc0d4ca5ed 100644 --- a/lang/no/groups.php +++ b/lang/no/groups.php @@ -3,8 +3,6 @@ return [ 'group' => 'Group', 'groups' => 'Groups', - 'all_groups' => 'All groups', - 'search_name' => 'Search name', 'add_groups' => 'Add a group', 'add_groups_content' => 'Tell us more about your group, so we can create a page for you and help you publicise to potential volunteers and participants.', 'create_groups' => 'Create new group', diff --git a/mysql/my.cnf b/mysql/my.cnf index 038590de40..f16e66fa4c 100644 --- a/mysql/my.cnf +++ b/mysql/my.cnf @@ -5,4 +5,8 @@ general_log_file = /var/lib/mysql/general.log # Disable ONLY_FULL_GROUP_BY for compatibility with getItemTypes() query # This query uses window functions in a way that's incompatible with strict GROUP BY mode -sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" \ No newline at end of file +sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" + +# Allow non-SUPER users to create triggers/functions when binary logging is enabled. +# MySQL 8.0 enables binary logging by default, which blocks trigger creation without this. +log_bin_trust_function_creators = 1 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 991ec4ca76..b9e186b3d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "www", + "name": "map-groups", "lockfileVersion": 3, "requires": true, "packages": { @@ -8,6 +8,7 @@ "@popperjs/core": "^2.11.8", "@sentry/tracing": "^7.119.0", "@sentry/vue": "^7.119.0", + "@vectorial1024/leaflet-color-markers": "^2.0.4", "ajv": "^6.12.3", "babel-plugin-istanbul": "^6.1.1", "bootstrap-fileinput": "^4.4.9", @@ -29,6 +30,7 @@ "js-cookie": "^2.2.0", "lang.js": "^1.1.14", "leaflet": "^1.4.0", + "leaflet-control-geocoder": "^1.13.0", "lodash-es": "^4.17.21", "moment": "^2.29.4", "moment-timezone": "^0.5.35", @@ -95,6 +97,8 @@ "resolve-url-loader": "^5.0.0", "sass": "^1.56.1", "sass-loader": "^12.6.0", + "ts-loader": "^9.5.1", + "typescript": "^5.6.3", "v8-to-istanbul": "^8.0.0", "vite": "^4.5.0", "vite-plugin-laravel-translations": "^0.3.1", @@ -4162,6 +4166,15 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@vectorial1024/leaflet-color-markers": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vectorial1024/leaflet-color-markers/-/leaflet-color-markers-2.0.4.tgz", + "integrity": "sha512-lAYvIG/FXMQjNR7SjN0uGowpGkEwJobrmnUUH4q/ViRyhw/3n1K03a2GW0TTgLpi2OVLOFJfVJz4j+NZeXYj5A==", + "license": "BSD-2-Clause", + "peerDependencies": { + "leaflet": "^1.0.0" + } + }, "node_modules/@vitejs/plugin-vue2": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.3.tgz", @@ -14300,6 +14313,15 @@ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz", "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA==" }, + "node_modules/leaflet-control-geocoder": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/leaflet-control-geocoder/-/leaflet-control-geocoder-1.13.0.tgz", + "integrity": "sha512-mgYGx/2WA5CcvhP+IJtw7VvJwSGAe5zxX+TKe6ruYkLj2W5I5V/K/nQiLvsUtqifBojBGoKIPNZ8m0mXJNIudg==", + "license": "BSD-2-Clause", + "optionalDependencies": { + "open-location-code": "^1.0.0" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -18149,6 +18171,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open-location-code": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/open-location-code/-/open-location-code-1.0.3.tgz", + "integrity": "sha512-DBm14BSn40Ee241n80zIFXIT6+y8Tb0I+jTdosLJ8Sidvr2qONvymwqymVbHV2nS+1gkDZ5eTNpnOIVV0Kn2fw==", + "license": "Apache-2.0", + "optional": true + }, "node_modules/open/node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -21508,6 +21537,37 @@ "dev": true, "license": "MIT" }, + "node_modules/ts-loader": { + "version": "9.5.7", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.7.tgz", + "integrity": "sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, "node_modules/tsconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", @@ -21595,6 +21655,20 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/ua-parser-js": { "version": "1.0.41", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.41.tgz", diff --git a/package.json b/package.json index 48d6b32144..29a8a07046 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,8 @@ "resolve-url-loader": "^5.0.0", "sass": "^1.56.1", "sass-loader": "^12.6.0", + "ts-loader": "^9.5.1", + "typescript": "^5.6.3", "v8-to-istanbul": "^8.0.0", "vite": "^4.5.0", "vite-plugin-laravel-translations": "^0.3.1", @@ -57,6 +59,7 @@ "@popperjs/core": "^2.11.8", "@sentry/tracing": "^7.119.0", "@sentry/vue": "^7.119.0", + "@vectorial1024/leaflet-color-markers": "^2.0.4", "ajv": "^6.12.3", "babel-plugin-istanbul": "^6.1.1", "bootstrap-fileinput": "^4.4.9", @@ -78,6 +81,7 @@ "js-cookie": "^2.2.0", "lang.js": "^1.1.14", "leaflet": "^1.4.0", + "leaflet-control-geocoder": "^1.13.0", "lodash-es": "^4.17.21", "moment": "^2.29.4", "moment-timezone": "^0.5.35", diff --git a/patches/composer.patches.json b/patches/composer.patches.json index 5a1ab2987d..88eeec246b 100644 --- a/patches/composer.patches.json +++ b/patches/composer.patches.json @@ -1,10 +1,16 @@ { "patches": { + "guzzlehttp/promises": { + "PHP 8.4 nullable type deprecations": "patches/guzzle-promises-nullable.patch" + }, "addwiki/mediawiki-api-base": { "Make getClient public": "patches/mediawiki-api-base.patch" }, "mariuzzo/laravel-js-localization": { "Translation doesn't handle new lang folder location": "patches/laravel-translation.patch" + }, + "wouternl/laravel-drip": { + "Add Laravel 11/12/13 support": "patches/laravel-drip-l11.patch" } } } \ No newline at end of file diff --git a/patches/guzzle-promises-nullable.patch b/patches/guzzle-promises-nullable.patch new file mode 100644 index 0000000000..3127ee1bea --- /dev/null +++ b/patches/guzzle-promises-nullable.patch @@ -0,0 +1,42 @@ +--- a/src/functions.php ++++ b/src/functions.php +@@ -21,7 +21,7 @@ + * + * @deprecated queue will be removed in guzzlehttp/promises:2.0. Use Utils::queue instead. + */ +-function queue(TaskQueueInterface $assign = null) ++function queue(?TaskQueueInterface $assign = null) + { + return Utils::queue($assign); + } +@@ -259,8 +259,8 @@ + */ + function each( + $iterable, +- callable $onFulfilled = null, +- callable $onRejected = null ++ ?callable $onFulfilled = null, ++ ?callable $onRejected = null + ) { + return Each::of($iterable, $onFulfilled, $onRejected); + } +@@ -285,8 +285,8 @@ + function each_limit( + $iterable, + $concurrency, +- callable $onFulfilled = null, +- callable $onRejected = null ++ ?callable $onFulfilled = null, ++ ?callable $onRejected = null + ) { + return Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected); + } +@@ -307,7 +307,7 @@ + function each_limit_all( + $iterable, + $concurrency, +- callable $onFulfilled = null ++ ?callable $onFulfilled = null + ) { + return Each::ofLimitAll($iterable, $concurrency, $onFulfilled); + } diff --git a/patches/laravel-drip-l11.patch b/patches/laravel-drip-l11.patch new file mode 100644 index 0000000000..ace4f97b24 --- /dev/null +++ b/patches/laravel-drip-l11.patch @@ -0,0 +1,8 @@ +--- a/composer.json ++++ b/composer.json +@@ -17,7 +17,7 @@ + "require": { + "php" : ">=8.1.0", +- "laravel/framework": "5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0" ++ "laravel/framework": "5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0" + }, diff --git a/phpunit.xml b/phpunit.xml index 2df3c4ebc7..9e9a5f8a5a 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,10 +1,5 @@ - - - - ./app - - + ./tests/Feature @@ -22,11 +17,12 @@ + - + @@ -37,4 +33,9 @@ + + + ./app + + diff --git a/resources/global/css/_global.scss b/resources/global/css/_global.scss index 1fe59bae2a..b5ec2b114c 100644 --- a/resources/global/css/_global.scss +++ b/resources/global/css/_global.scss @@ -141,4 +141,20 @@ h2 { .fa-fw { width: 1rem; height: 1rem; -} \ No newline at end of file +} + +.fa-spin { + animation-name: spin; + animation-duration: 4s; + animation-timing-function: linear; + animation-iteration-count: infinite; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} diff --git a/resources/js/app.js b/resources/js/app.js index 4cc54ab738..dec3fd8fe5 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -55,6 +55,9 @@ import RichTextEditor from './components/RichTextEditor.vue' import Notifications from './components/Notifications.vue' import GroupTimeZone from './components/GroupTimeZone.vue' import StatsShare from './components/StatsShare.vue' +import GroupMapAndList from './components/GroupMapAndList.vue' +import GroupMarker from './components/GroupMarker.vue' +import GroupInfoModal from './components/GroupInfoModal.vue' import CategoriesTable from './components/CategoriesTable.vue' import RolesTable from './components/RolesTable.vue' import EmailValidation from './components/EmailValidation.vue' @@ -419,6 +422,9 @@ function initializeJQuery() { 'categories-table': CategoriesTable, 'roles-table': RolesTable, 'emailvalidation': EmailValidation, + 'groupmapandlist': GroupMapAndList, + 'groupmarker': GroupMarker, + 'groupinfomodal': GroupInfoModal, } }) }) @@ -1073,6 +1079,6 @@ function initAutocomplete() { // All jQuery initialization moved to initializeJQuery() function above // Sentry initialization is also inside the initializeJQuery() function -// Start jQuery initialization (called earlier on line 509, don't duplicate here) +// Start jQuery initialization (called earlier in file) // initializeJQuery(); diff --git a/resources/js/components/AlertBanner.vue b/resources/js/components/AlertBanner.vue index 16096db683..ad6ac7b886 100644 --- a/resources/js/components/AlertBanner.vue +++ b/resources/js/components/AlertBanner.vue @@ -50,7 +50,14 @@ export default { }, }, async mounted() { - await this.$store.dispatch('alerts/fetch') + // Wrap to avoid an unhandled rejection if the alerts endpoint fails: + // Vue 2's scheduler leaks `pending` when a lifecycle hook rejects + // unobserved, after which dep.notify() never flushes its watchers. + try { + await this.$store.dispatch('alerts/fetch') + } catch (e) { + console.error('Failed to fetch alerts:', e) + } }, methods: { dismissed(id) { diff --git a/resources/js/components/EventsRequiringModeration.vue b/resources/js/components/EventsRequiringModeration.vue index c48e00af02..9374af9be9 100644 --- a/resources/js/components/EventsRequiringModeration.vue +++ b/resources/js/components/EventsRequiringModeration.vue @@ -54,7 +54,13 @@ export default { }, }, async mounted() { - await this.$store.dispatch('events/getModerationRequired') + try { + await this.$store.dispatch('events/getModerationRequired') + } catch (e) { + // See note in GroupsRequiringModeration.vue: an unhandled async + // rejection here breaks Vue 2's nextTick scheduler. + console.error('Failed to fetch events requiring moderation:', e) + } this.$nextTick(() => { this.loaded = true }) diff --git a/resources/js/components/GroupInfoModal.vue b/resources/js/components/GroupInfoModal.vue new file mode 100644 index 0000000000..833b86c5ac --- /dev/null +++ b/resources/js/components/GroupInfoModal.vue @@ -0,0 +1,93 @@ + + + diff --git a/resources/js/components/GroupMap.test.js b/resources/js/components/GroupMap.test.js new file mode 100644 index 0000000000..3958222726 --- /dev/null +++ b/resources/js/components/GroupMap.test.js @@ -0,0 +1,67 @@ +import Vue from "vue" +import { BootstrapVue } from 'bootstrap-vue' +Vue.use(BootstrapVue) + +import { shallowMount, createLocalVue } from '@vue/test-utils' +import Vuex from 'vuex' +import LangMixin from 'resources/js/mixins/lang.js' +import GroupMap from './GroupMap.vue' + +const localVue = createLocalVue() +localVue.use(Vuex) +localVue.mixin(LangMixin) + +function makeStore() { + return new Vuex.Store({ + modules: { + groups: { + namespaced: true, + getters: { list: () => [] }, + }, + }, + }) +} + +function fakeMap() { + return { + invalidateSize: jest.fn(), + getBounds: () => ({}), + getZoom: () => 5, + getCenter: () => ({ lat: 0, lng: 0 }), + } +} + +describe('GroupMap visibility handling', () => { + // Regression (grey map): when the map is created inside a hidden tab its + // Leaflet container is 0x0. When the tab becomes visible nothing tells + // Leaflet to re-measure, so tiles never fill the now-visible area and most + // of the map shows as grey. The component must observe size changes and call + // invalidateSize(). + test('calls invalidateSize when its container is resized (becomes visible)', () => { + let resizeCb = null + let observed = false + global.ResizeObserver = class { + constructor(cb) { resizeCb = cb } + observe() { observed = true } + unobserve() {} + disconnect() {} + } + + const wrapper = shallowMount(GroupMap, { + localVue, + store: makeStore(), + propsData: { initialBounds: [] }, + }) + + const map = fakeMap() + wrapper.vm.mapObject = map + wrapper.vm.$refs.map = { mapObject: map } + + expect(observed).toBe(true) + expect(typeof resizeCb).toBe('function') + + resizeCb([{ contentRect: { width: 688, height: 400 } }]) + + expect(map.invalidateSize).toHaveBeenCalled() + }) +}) diff --git a/resources/js/components/GroupMap.vue b/resources/js/components/GroupMap.vue new file mode 100644 index 0000000000..7ec13dbd59 --- /dev/null +++ b/resources/js/components/GroupMap.vue @@ -0,0 +1,323 @@ + + + diff --git a/resources/js/components/GroupMapAndList.vue b/resources/js/components/GroupMapAndList.vue new file mode 100644 index 0000000000..4bae399b42 --- /dev/null +++ b/resources/js/components/GroupMapAndList.vue @@ -0,0 +1,137 @@ + + + diff --git a/resources/js/components/GroupMarker.vue b/resources/js/components/GroupMarker.vue new file mode 100644 index 0000000000..4befada9a2 --- /dev/null +++ b/resources/js/components/GroupMarker.vue @@ -0,0 +1,80 @@ + + + diff --git a/resources/js/components/GroupPage.vue b/resources/js/components/GroupPage.vue index 49b2a14360..13389517c4 100644 --- a/resources/js/components/GroupPage.vue +++ b/resources/js/components/GroupPage.vue @@ -177,6 +177,7 @@ export default { this.initialGroup.candemote = this.candemote this.initialGroup.ingroup = this.ingroup + console.log('Group page initial group', this.initialGroup) this.$store.dispatch('groups/set', this.initialGroup) this.events.forEach(e => { diff --git a/resources/js/components/GroupsPage.test.js b/resources/js/components/GroupsPage.test.js new file mode 100644 index 0000000000..84b387012e --- /dev/null +++ b/resources/js/components/GroupsPage.test.js @@ -0,0 +1,82 @@ +import Vue from "vue" +import { BootstrapVue } from 'bootstrap-vue' +Vue.use(BootstrapVue) + +import { mount, createLocalVue } from '@vue/test-utils' +import Vuex from 'vuex' +import LangMixin from 'resources/js/mixins/lang.js' +import GroupsPage from './GroupsPage.vue' + +const localVue = createLocalVue() +localVue.use(Vuex) + +function makeStore() { + return new Vuex.Store({ + modules: { + groups: { + namespaced: true, + getters: { list: () => [] }, + actions: { fetch: () => Promise.resolve() }, + }, + }, + }) +} + +const groupsTableStub = { + name: 'GroupsTable', + props: { + groupids: { type: Array }, + tab: { type: Number, default: 0 }, + yourArea: { type: String, default: null }, + networks: { type: Array, default: null }, + allGroupTags: { type: Array, default: null }, + showTags: { type: Boolean, default: false }, + }, + template: '
', +} + +const groupMapStub = { name: 'GroupMapAndList', template: '
' } + +function makeWrapper(props = {}) { + return mount(GroupsPage, { + localVue, + store: makeStore(), + mixins: [LangMixin], + propsData: { + yourGroups: [1, 2], + nearbyGroups: [], + networks: [{ id: 10, name: 'Test' }], + allGroupTags: [{ id: 1, tag_name: 'Foo' }], + ...props, + }, + stubs: { GroupsTable: groupsTableStub, GroupMapAndList: groupMapStub }, + }) +} + +async function flushTabs(wrapper) { + // b-tab has `lazy`, so the tab's content only renders after the tab activates + // on the first Vue tick. + await wrapper.vm.$nextTick() + await wrapper.vm.$nextTick() +} + +test('forwards showTags / networks / allGroupTags to the inner GroupsTable so tag badges render on the "your groups" tab', async () => { + const networks = [{ id: 10, name: 'Test' }] + const allGroupTags = [{ id: 1, tag_name: 'Foo' }, { id: 2, tag_name: 'Bar' }] + const wrapper = makeWrapper({ showTags: true, networks, allGroupTags }) + await flushTabs(wrapper) + + const table = wrapper.findComponent(groupsTableStub) + expect(table.exists()).toBe(true) + expect(table.props('showTags')).toBe(true) + expect(table.props('networks')).toEqual(networks) + expect(table.props('allGroupTags')).toEqual(allGroupTags) +}) + +test('forwards yourArea (bound, not the literal string "yourArea") to GroupsTable', async () => { + const wrapper = makeWrapper({ yourArea: 'London' }) + await flushTabs(wrapper) + + const table = wrapper.findComponent(groupsTableStub) + expect(table.props('yourArea')).toBe('London') +}) diff --git a/resources/js/components/GroupsPage.vue b/resources/js/components/GroupsPage.vue index 4dd8ebd953..3249e493be 100644 --- a/resources/js/components/GroupsPage.vue +++ b/resources/js/components/GroupsPage.vue @@ -27,67 +27,43 @@
- +
-

- {{ nearestGroups }} - {{ __('groups.nearest_groups_change') }}. -

- +
- - - -