diff --git a/.idea/php.xml b/.idea/php.xml index b4cba32..aa2a1b7 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -216,6 +216,9 @@ + + + diff --git a/Dockerfile b/Dockerfile index e809d78..c998fb6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 # Versions -FROM dunglas/frankenphp:1-php8.3-alpine AS frankenphp_upstream +FROM dunglas/frankenphp:1-php8.3 AS frankenphp_upstream # Base FrankenPHP image FROM frankenphp_upstream AS frankenphp_base @@ -11,26 +11,30 @@ VOLUME /app/var/ # persistent / runtime deps RUN set -eux; \ - apk add --no-cache \ - acl \ - fcgi \ - file \ - gettext \ - git \ - ; + curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh \ + && bash nodesource_setup.sh \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + acl=* \ + file=* \ + gettext=* \ + git=* \ + nodejs=* \ + && corepack enable \ + && rm -rf /var/lib/apt/lists/* RUN set -eux; \ - install-php-extensions \ - @composer \ - apcu \ - curl \ - intl \ - opcache \ - zip \ + install-php-extensions \ + @composer \ + apcu \ + curl \ + intl \ + opcache \ + zip \ redis \ pdo_pgsql \ sysvsem \ - ; + ; # https://getcomposer.org/doc/03-cli.md#composer-allow-superuser ENV COMPOSER_ALLOW_SUPERUSER=1 @@ -54,13 +58,11 @@ ENV APP_ENV=dev XDEBUG_MODE=off RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" RUN set -eux; \ - install-php-extensions \ - xdebug \ - ; + install-php-extensions \ + xdebug \ + ; -CMD (php bin/console sass:build --watch &); \ - (php bin/console typescript:build --watch &); \ - (frankenphp run --config /etc/caddy/Caddyfile --watch); +CMD ["frankenphp", "run", "--config", "/etc/caddy/Caddyfile", "--watch"] # Prod FrankenPHP image FROM frankenphp_base AS frankenphp_prod @@ -75,20 +77,22 @@ COPY --link frankenphp/conf.d/20-app.prod.ini $PHP_INI_DIR/app.conf.d/ COPY --link frankenphp/worker.Caddyfile /etc/caddy/worker.Caddyfile # prevent the reinstallation of vendors at every changes in the source code -COPY --link composer.* symfony.* ./ +COPY --link composer.* symfony.* package.json* pnpm-lock.yaml* ./ RUN set -eux; \ - composer install --no-cache --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress + corepack prepare; \ + composer install --no-cache --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress; \ + pnpm install --prod --prefer-frozen-lockfile; # copy sources COPY --link . ./ RUN rm -Rf frankenphp/ RUN set -eux; \ - mkdir -p var/cache var/log; \ - composer dump-autoload --classmap-authoritative --no-dev; \ - composer dump-env prod; \ - composer run-script --no-dev post-install-cmd; \ - chmod +x bin/console; sync; + mkdir -p var/cache var/log; \ + composer dump-autoload --classmap-authoritative --no-dev; \ + composer dump-env prod; \ + composer run-script --no-dev post-install-cmd; \ + chmod +x bin/console; sync; # build route cache, sass and asset maps RUN set -eux; \ diff --git a/assets/styles/app.scss b/assets/styles/app.scss index 9602906..a3a504e 100644 --- a/assets/styles/app.scss +++ b/assets/styles/app.scss @@ -358,9 +358,10 @@ ul.credit { .app-overview-dashboard { display: grid; - gap: 3rem; + gap: 1rem; grid-template: "hello-text" auto + "announcements" auto "weekly-metrics" auto "historic-statistics" auto "leaderboard" auto; @@ -368,6 +369,7 @@ ul.credit { @media (min-width: 1440px) { grid-template: "hello-text hello-text hello-text hello-text" auto + "announcements announcements announcements announcements" auto "weekly-metrics weekly-metrics leaderboard leaderboard" 1fr "historic-statistics historic-statistics leaderboard leaderboard" 1fr; grid-template-columns: 2fr 2fr 1fr 1fr; @@ -388,6 +390,10 @@ ul.credit { &__leaderboard { grid-area: leaderboard; } + + &__announcements { + grid-area: announcements; + } } // The placeholder that shows only after 100ms diff --git a/compose.yaml b/compose.yaml index e27e85a..d9360ce 100644 --- a/compose.yaml +++ b/compose.yaml @@ -58,6 +58,7 @@ services: volumes: - caddy_data:/data - caddy_config:/config + - web_node_modules:/app/node_modules ports: # HTTP - target: 80 @@ -80,3 +81,4 @@ volumes: caddy_data: caddy_config: meili_data: + web_node_modules: diff --git a/composer.json b/composer.json index 0ca717a..af12525 100644 --- a/composer.json +++ b/composer.json @@ -23,47 +23,49 @@ "nyholm/psr7": "dev-master", "openai-php/client": "dev-main", "oro/doctrine-extensions": "dev-master", - "phpdocumentor/reflection-docblock": "^5.5", + "phpdocumentor/reflection-docblock": "5.*", "runtime/frankenphp-symfony": "dev-main", "sensiolabs/typescript-bundle": "dev-main", - "symfony/asset": "7.2.*", - "symfony/asset-mapper": "7.2.*", - "symfony/console": "7.2.*", - "symfony/doctrine-messenger": "7.2.*", - "symfony/dotenv": "7.2.*", + "symfony/asset": "7.3.*", + "symfony/asset-mapper": "7.3.*", + "symfony/console": "7.3.*", + "symfony/doctrine-messenger": "7.3.*", + "symfony/dotenv": "7.3.*", "symfony/flex": "^2", - "symfony/form": "7.2.*", - "symfony/framework-bundle": "7.2.*", - "symfony/http-client": "7.2.*", - "symfony/intl": "7.2.*", - "symfony/line-notify-notifier": "7.2.*", - "symfony/lock": "7.2.*", - "symfony/mailer": "7.2.*", - "symfony/messenger": "7.2.*", - "symfony/mime": "7.2.*", + "symfony/form": "7.3.*", + "symfony/framework-bundle": "7.3.*", + "symfony/http-client": "7.3.*", + "symfony/intl": "7.3.*", + "symfony/line-notify-notifier": "7.3.*", + "symfony/lock": "7.3.*", + "symfony/mailer": "7.3.*", + "symfony/messenger": "7.3.*", + "symfony/mime": "7.3.*", "symfony/monolog-bundle": "^3.0", - "symfony/notifier": "7.2.*", - "symfony/password-hasher": "7.2.*", - "symfony/process": "7.2.*", - "symfony/runtime": "7.2.*", - "symfony/security-bundle": "7.2.*", - "symfony/serializer": "7.2.*", + "symfony/notifier": "7.3.*", + "symfony/password-hasher": "7.3.*", + "symfony/process": "7.3.*", + "symfony/runtime": "7.3.*", + "symfony/security-bundle": "7.3.*", + "symfony/serializer": "7.3.*", "symfony/stimulus-bundle": "2.*", - "symfony/string": "7.2.*", - "symfony/translation": "7.2.*", - "symfony/twig-bundle": "7.2.*", + "symfony/string": "7.3.*", + "symfony/translation": "7.3.*", + "symfony/twig-bridge": "7.3.*", + "symfony/twig-bundle": "7.3.*", "symfony/ux-chartjs": "2.*", "symfony/ux-live-component": "2.*", "symfony/ux-turbo": "2.*", "symfony/ux-twig-component": "2.*", - "symfony/validator": "7.2.*", - "symfony/yaml": "7.2.*", + "symfony/validator": "7.3.*", + "symfony/web-link": "7.3.*", + "symfony/yaml": "7.3.*", "symfonycasts/sass-bundle": "dev-main", "twbs/bootstrap": "dev-main", "twig/extra-bundle": "3.*", "twig/markdown-extra": "3.*", "twig/string-extra": "3.*", - "twig/twig": "3.14.*" + "twig/twig": "3.*" }, "config": { "allow-plugins": { @@ -93,7 +95,8 @@ "symfony/polyfill-php80": "*", "symfony/polyfill-php81": "*", "symfony/polyfill-php82": "*", - "symfony/polyfill-php83": "*" + "symfony/polyfill-php83": "*", + "symfony/polyfill-php84": "*" }, "scripts": { "lint": [ @@ -102,7 +105,8 @@ "pnpm format", "php-cs-fixer fix --config .php-cs-fixer.dist.php", "twig-cs-fixer lint --fix templates", - "phpstan analyse" + "phpstan analyse", + "hadolint Dockerfile*" ], "auto-scripts": { "cache:clear": "symfony-cmd", @@ -122,7 +126,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "7.2.*", + "require": "7.3.*", "docker": true } }, @@ -135,13 +139,13 @@ "phpstan/phpstan-strict-rules": "2.0.x-dev", "phpstan/phpstan-symfony": "2.0.x-dev", "phpunit/phpunit": "^10", - "symfony/browser-kit": "7.2.*", - "symfony/css-selector": "7.2.*", - "symfony/debug-bundle": "7.2.*", + "symfony/browser-kit": "7.3.*", + "symfony/css-selector": "7.3.*", + "symfony/debug-bundle": "7.3.*", "symfony/maker-bundle": "^1.0", - "symfony/phpunit-bridge": "^7.2", - "symfony/stopwatch": "7.2.*", - "symfony/web-profiler-bundle": "7.2.*", + "symfony/phpunit-bridge": "7.3.*", + "symfony/stopwatch": "7.3.*", + "symfony/web-profiler-bundle": "7.3.*", "vincentlanglet/twig-cs-fixer": "dev-main" } } diff --git a/composer.lock b/composer.lock index 631ae23..f65026a 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": "b6b9d76051e4f86a984f3817cd87bba1", + "content-hash": "f459ad30f7f54194e3f29cb05fec14fb", "packages": [ { "name": "composer/semver", @@ -351,12 +351,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "9c6e7c25653324c28791ebf70554b39cc7b92a68" + "reference": "54c770658f5cca9719a038ca0fb3e6a6403519ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/9c6e7c25653324c28791ebf70554b39cc7b92a68", - "reference": "9c6e7c25653324c28791ebf70554b39cc7b92a68", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/54c770658f5cca9719a038ca0fb3e6a6403519ca", + "reference": "54c770658f5cca9719a038ca0fb3e6a6403519ca", "shasum": "" }, "require": { @@ -456,7 +456,7 @@ "type": "tidelift" } ], - "time": "2024-11-24T16:17:44+00:00" + "time": "2024-11-29T20:30:39+00:00" }, { "name": "doctrine/deprecations", @@ -464,12 +464,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "0d0c25d81be87f7143d1dfc635974d255e26291c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0d0c25d81be87f7143d1dfc635974d255e26291c", + "reference": "0d0c25d81be87f7143d1dfc635974d255e26291c", "shasum": "" }, "require": { @@ -491,7 +491,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -502,9 +502,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.x" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-01T07:04:16+00:00" }, { "name": "doctrine/doctrine-bundle", @@ -1052,12 +1052,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "610092c278c0430d6cc0c09cfb2a9f5c3f85ab33" + "reference": "72f58ae3a954b25460866ab0738d877f7c0cb0b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/610092c278c0430d6cc0c09cfb2a9f5c3f85ab33", - "reference": "610092c278c0430d6cc0c09cfb2a9f5c3f85ab33", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/72f58ae3a954b25460866ab0738d877f7c0cb0b7", + "reference": "72f58ae3a954b25460866ab0738d877f7c0cb0b7", "shasum": "" }, "require": { @@ -1147,7 +1147,7 @@ "type": "tidelift" } ], - "time": "2024-08-28T13:42:07+00:00" + "time": "2024-11-30T09:00:29+00:00" }, { "name": "doctrine/orm", @@ -1400,12 +1400,12 @@ "source": { "type": "git", "url": "https://github.com/EasyCorp/EasyAdminBundle.git", - "reference": "abe5cac99c21d01ad497b6af86fc0e5ecb632cab" + "reference": "2307da58ccfd0569f65943b9a01d49a4f3a71d7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/EasyCorp/EasyAdminBundle/zipball/abe5cac99c21d01ad497b6af86fc0e5ecb632cab", - "reference": "abe5cac99c21d01ad497b6af86fc0e5ecb632cab", + "url": "https://api.github.com/repos/EasyCorp/EasyAdminBundle/zipball/2307da58ccfd0569f65943b9a01d49a4f3a71d7d", + "reference": "2307da58ccfd0569f65943b9a01d49a4f3a71d7d", "shasum": "" }, "require": { @@ -1481,7 +1481,7 @@ ], "support": { "issues": "https://github.com/EasyCorp/EasyAdminBundle/issues", - "source": "https://github.com/EasyCorp/EasyAdminBundle/tree/v4.16.2" + "source": "https://github.com/EasyCorp/EasyAdminBundle/tree/4.x" }, "funding": [ { @@ -1489,7 +1489,7 @@ "type": "github" } ], - "time": "2024-11-26T19:48:14+00:00" + "time": "2024-11-29T18:27:19+00:00" }, { "name": "egulias/email-validator", @@ -1893,12 +1893,12 @@ "source": { "type": "git", "url": "https://github.com/meilisearch/meilisearch-symfony.git", - "reference": "9b25dfc49a2407ccdb2675cba4d0cf6e6cd8e300" + "reference": "d46b2da1865ef228aaca67eeac9e6851022dbeaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/meilisearch/meilisearch-symfony/zipball/9b25dfc49a2407ccdb2675cba4d0cf6e6cd8e300", - "reference": "9b25dfc49a2407ccdb2675cba4d0cf6e6cd8e300", + "url": "https://api.github.com/repos/meilisearch/meilisearch-symfony/zipball/d46b2da1865ef228aaca67eeac9e6851022dbeaf", + "reference": "d46b2da1865ef228aaca67eeac9e6851022dbeaf", "shasum": "" }, "require": { @@ -1963,9 +1963,9 @@ ], "support": { "issues": "https://github.com/meilisearch/meilisearch-symfony/issues", - "source": "https://github.com/meilisearch/meilisearch-symfony/tree/v0.15.6" + "source": "https://github.com/meilisearch/meilisearch-symfony/tree/main" }, - "time": "2024-10-24T03:40:51+00:00" + "time": "2024-12-01T18:32:28+00:00" }, { "name": "monolog/monolog", @@ -3186,6 +3186,63 @@ }, "time": "2023-04-04T09:54:51+00:00" }, + { + "name": "psr/link", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "5b8d54ad01c46baa3bb13388640a62fdb34461a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/5b8d54ad01c46baa3bb13388640a62fdb34461a5", + "reference": "5b8d54ad01c46baa3bb13388640a62fdb34461a5", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "suggest": { + "fig/link-util": "Provides some useful PSR-13 utilities" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "homepage": "https://github.com/php-fig/link", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "support": { + "source": "https://github.com/php-fig/link/tree/master" + }, + "time": "2022-06-21T13:38:53+00:00" + }, { "name": "psr/log", "version": "dev-master", @@ -3349,7 +3406,7 @@ }, { "name": "symfony/asset", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", @@ -3398,7 +3455,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/7.2" + "source": "https://github.com/symfony/asset/tree/v7.2.0" }, "funding": [ { @@ -3418,7 +3475,7 @@ }, { "name": "symfony/asset-mapper", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/asset-mapper.git", @@ -3477,7 +3534,7 @@ "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset-mapper/tree/7.2" + "source": "https://github.com/symfony/asset-mapper/tree/v7.2.0" }, "funding": [ { @@ -3497,7 +3554,7 @@ }, { "name": "symfony/cache", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", @@ -3575,7 +3632,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/7.2" + "source": "https://github.com/symfony/cache/tree/v7.2.0" }, "funding": [ { @@ -3672,7 +3729,7 @@ }, { "name": "symfony/clock", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", @@ -3726,7 +3783,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/7.2" + "source": "https://github.com/symfony/clock/tree/v7.2.0" }, "funding": [ { @@ -3746,7 +3803,7 @@ }, { "name": "symfony/config", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/config.git", @@ -3801,7 +3858,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/7.2" + "source": "https://github.com/symfony/config/tree/v7.2.0" }, "funding": [ { @@ -3821,7 +3878,7 @@ }, { "name": "symfony/console", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/console.git", @@ -3894,7 +3951,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/7.2" + "source": "https://github.com/symfony/console/tree/v7.2.0" }, "funding": [ { @@ -3914,7 +3971,7 @@ }, { "name": "symfony/dependency-injection", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", @@ -3974,7 +4031,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/7.2" + "source": "https://github.com/symfony/dependency-injection/tree/v7.2.0" }, "funding": [ { @@ -4062,7 +4119,7 @@ }, { "name": "symfony/doctrine-bridge", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", @@ -4151,7 +4208,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/7.2" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.2.0" }, "funding": [ { @@ -4171,7 +4228,7 @@ }, { "name": "symfony/doctrine-messenger", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", @@ -4223,7 +4280,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/7.2" + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.2.0" }, "funding": [ { @@ -4243,7 +4300,7 @@ }, { "name": "symfony/dotenv", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", @@ -4297,7 +4354,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/7.2" + "source": "https://github.com/symfony/dotenv/tree/v7.2.0" }, "funding": [ { @@ -4317,7 +4374,7 @@ }, { "name": "symfony/error-handler", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", @@ -4372,7 +4429,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/7.2" + "source": "https://github.com/symfony/error-handler/tree/v7.2.0" }, "funding": [ { @@ -4392,7 +4449,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -4452,7 +4509,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/7.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -4549,7 +4606,7 @@ }, { "name": "symfony/filesystem", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -4595,7 +4652,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/7.2" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -4615,7 +4672,7 @@ }, { "name": "symfony/finder", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -4659,7 +4716,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/7.2" + "source": "https://github.com/symfony/finder/tree/v7.2.0" }, "funding": [ { @@ -4748,7 +4805,7 @@ }, { "name": "symfony/form", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/form.git", @@ -4825,7 +4882,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/7.2" + "source": "https://github.com/symfony/form/tree/v7.2.0" }, "funding": [ { @@ -4845,7 +4902,7 @@ }, { "name": "symfony/framework-bundle", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", @@ -4975,7 +5032,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/7.2" + "source": "https://github.com/symfony/framework-bundle/tree/v7.2.0" }, "funding": [ { @@ -4995,16 +5052,16 @@ }, { "name": "symfony/http-client", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "99ceaedb5fc35111147beff1f6973aafdcd2db69" + "reference": "955e43336aff03df1e8a8e17daefabb0127a313b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/99ceaedb5fc35111147beff1f6973aafdcd2db69", - "reference": "99ceaedb5fc35111147beff1f6973aafdcd2db69", + "url": "https://api.github.com/repos/symfony/http-client/zipball/955e43336aff03df1e8a8e17daefabb0127a313b", + "reference": "955e43336aff03df1e8a8e17daefabb0127a313b", "shasum": "" }, "require": { @@ -5086,7 +5143,7 @@ "type": "tidelift" } ], - "time": "2024-11-27T12:19:59+00:00" + "time": "2024-11-29T08:22:02+00:00" }, { "name": "symfony/http-client-contracts", @@ -5169,7 +5226,7 @@ }, { "name": "symfony/http-foundation", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", @@ -5227,7 +5284,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/7.2" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.0" }, "funding": [ { @@ -5247,16 +5304,16 @@ }, { "name": "symfony/http-kernel", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8672d96bd84b000f15c2b05724ef0b91fd4ac93f" + "reference": "52b0f33f21683a1a78a61a762a7632f45942f97d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8672d96bd84b000f15c2b05724ef0b91fd4ac93f", - "reference": "8672d96bd84b000f15c2b05724ef0b91fd4ac93f", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/52b0f33f21683a1a78a61a762a7632f45942f97d", + "reference": "52b0f33f21683a1a78a61a762a7632f45942f97d", "shasum": "" }, "require": { @@ -5341,7 +5398,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/7.2" + "source": "https://github.com/symfony/http-kernel/tree/7.3" }, "funding": [ { @@ -5357,11 +5414,11 @@ "type": "tidelift" } ], - "time": "2024-11-20T11:17:29+00:00" + "time": "2024-11-20T12:24:43+00:00" }, { "name": "symfony/intl", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", @@ -5427,7 +5484,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/7.2" + "source": "https://github.com/symfony/intl/tree/v7.2.0" }, "funding": [ { @@ -5447,7 +5504,7 @@ }, { "name": "symfony/line-notify-notifier", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/line-notify-notifier.git", @@ -5498,7 +5555,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/line-notify-notifier/tree/7.2" + "source": "https://github.com/symfony/line-notify-notifier/tree/v7.2.0" }, "funding": [ { @@ -5518,7 +5575,7 @@ }, { "name": "symfony/lock", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", @@ -5576,7 +5633,7 @@ "semaphore" ], "support": { - "source": "https://github.com/symfony/lock/tree/7.2" + "source": "https://github.com/symfony/lock/tree/v7.2.0" }, "funding": [ { @@ -5596,7 +5653,7 @@ }, { "name": "symfony/mailer", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", @@ -5656,7 +5713,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/7.2" + "source": "https://github.com/symfony/mailer/tree/v7.2.0" }, "funding": [ { @@ -5676,7 +5733,7 @@ }, { "name": "symfony/messenger", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", @@ -5743,7 +5800,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/7.2" + "source": "https://github.com/symfony/messenger/tree/v7.2.0" }, "funding": [ { @@ -5763,7 +5820,7 @@ }, { "name": "symfony/mime", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -5827,7 +5884,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/7.2" + "source": "https://github.com/symfony/mime/tree/v7.2.0" }, "funding": [ { @@ -5847,7 +5904,7 @@ }, { "name": "symfony/monolog-bridge", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", @@ -5905,7 +5962,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/7.2" + "source": "https://github.com/symfony/monolog-bridge/tree/v7.2.0" }, "funding": [ { @@ -6007,7 +6064,7 @@ }, { "name": "symfony/notifier", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", @@ -6065,7 +6122,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/notifier/tree/7.2" + "source": "https://github.com/symfony/notifier/tree/v7.2.0" }, "funding": [ { @@ -6085,7 +6142,7 @@ }, { "name": "symfony/options-resolver", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", @@ -6132,7 +6189,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/7.2" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -6152,7 +6209,7 @@ }, { "name": "symfony/password-hasher", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", @@ -6204,7 +6261,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/7.2" + "source": "https://github.com/symfony/password-hasher/tree/v7.2.0" }, "funding": [ { @@ -6633,83 +6690,6 @@ ], "time": "2024-09-10T14:38:51+00:00" }, - { - "name": "symfony/polyfill-php84", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "48e55b8ecb3a52432be17bcac66eaaa3c3336f68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/48e55b8ecb3a52432be17bcac66eaaa3c3336f68", - "reference": "48e55b8ecb3a52432be17bcac66eaaa3c3336f68", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "default-branch": true, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/1.x" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-10T14:38:51+00:00" - }, { "name": "symfony/polyfill-uuid", "version": "1.x-dev", @@ -6792,7 +6772,7 @@ }, { "name": "symfony/process", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -6833,7 +6813,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/7.2" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -6853,7 +6833,7 @@ }, { "name": "symfony/property-access", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", @@ -6909,7 +6889,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/7.2" + "source": "https://github.com/symfony/property-access/tree/v7.2.0" }, "funding": [ { @@ -6929,7 +6909,7 @@ }, { "name": "symfony/property-info", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", @@ -6992,7 +6972,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/7.2" + "source": "https://github.com/symfony/property-info/tree/v7.2.0" }, "funding": [ { @@ -7012,7 +6992,7 @@ }, { "name": "symfony/routing", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", @@ -7073,7 +7053,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/7.2" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -7093,7 +7073,7 @@ }, { "name": "symfony/runtime", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", @@ -7152,7 +7132,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/7.2" + "source": "https://github.com/symfony/runtime/tree/v7.2.0" }, "funding": [ { @@ -7172,7 +7152,7 @@ }, { "name": "symfony/security-bundle", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", @@ -7258,7 +7238,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/7.2" + "source": "https://github.com/symfony/security-bundle/tree/v7.2.0" }, "funding": [ { @@ -7278,7 +7258,7 @@ }, { "name": "symfony/security-core", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", @@ -7345,7 +7325,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/7.2" + "source": "https://github.com/symfony/security-core/tree/v7.2.0" }, "funding": [ { @@ -7365,7 +7345,7 @@ }, { "name": "symfony/security-csrf", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", @@ -7415,7 +7395,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/7.2" + "source": "https://github.com/symfony/security-csrf/tree/v7.2.0" }, "funding": [ { @@ -7435,7 +7415,7 @@ }, { "name": "symfony/security-http", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", @@ -7503,7 +7483,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/7.2" + "source": "https://github.com/symfony/security-http/tree/v7.2.0" }, "funding": [ { @@ -7523,7 +7503,7 @@ }, { "name": "symfony/serializer", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", @@ -7601,7 +7581,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/7.2" + "source": "https://github.com/symfony/serializer/tree/v7.2.0" }, "funding": [ { @@ -7755,7 +7735,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/2.x" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.22.0" }, "funding": [ { @@ -7775,7 +7755,7 @@ }, { "name": "symfony/stopwatch", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", @@ -7817,7 +7797,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/7.2" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.0" }, "funding": [ { @@ -7837,7 +7817,7 @@ }, { "name": "symfony/string", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/string.git", @@ -7904,7 +7884,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/7.2" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -7924,7 +7904,7 @@ }, { "name": "symfony/translation", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", @@ -7999,7 +7979,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/7.2" + "source": "https://github.com/symfony/translation/tree/v7.2.0" }, "funding": [ { @@ -8098,16 +8078,16 @@ }, { "name": "symfony/twig-bridge", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "9958f5a5b6640734fe4b24c18897191f77a02c61" + "reference": "1343696b988e72beafc63a6cf386922ccb314a08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/9958f5a5b6640734fe4b24c18897191f77a02c61", - "reference": "9958f5a5b6640734fe4b24c18897191f77a02c61", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/1343696b988e72beafc63a6cf386922ccb314a08", + "reference": "1343696b988e72beafc63a6cf386922ccb314a08", "shasum": "" }, "require": { @@ -8204,11 +8184,11 @@ "type": "tidelift" } ], - "time": "2024-11-25T14:26:33+00:00" + "time": "2024-12-02T12:43:01+00:00" }, { "name": "symfony/twig-bundle", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", @@ -8272,7 +8252,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/7.2" + "source": "https://github.com/symfony/twig-bundle/tree/v7.2.0" }, "funding": [ { @@ -8292,7 +8272,7 @@ }, { "name": "symfony/type-info", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", @@ -8352,7 +8332,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/7.2" + "source": "https://github.com/symfony/type-info/tree/v7.2.0" }, "funding": [ { @@ -8372,7 +8352,7 @@ }, { "name": "symfony/uid", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", @@ -8426,7 +8406,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/7.2" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -8478,8 +8458,8 @@ "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -8507,7 +8487,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-chartjs/tree/2.x" + "source": "https://github.com/symfony/ux-chartjs/tree/v2.22.0" }, "funding": [ { @@ -8531,12 +8511,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/ux-live-component.git", - "reference": "b1e06e46dc00b6bf08d6ec24d278288bf71f3cf8" + "reference": "2df6a25f25788864e65cb8812d85e14ef80b6b44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/b1e06e46dc00b6bf08d6ec24d278288bf71f3cf8", - "reference": "b1e06e46dc00b6bf08d6ec24d278288bf71f3cf8", + "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/2df6a25f25788864e65cb8812d85e14ef80b6b44", + "reference": "2df6a25f25788864e65cb8812d85e14ef80b6b44", "shasum": "" }, "require": { @@ -8575,8 +8555,8 @@ "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -8602,7 +8582,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-live-component/tree/2.x" + "source": "https://github.com/symfony/ux-live-component/tree/v2.22.0" }, "funding": [ { @@ -8618,7 +8598,7 @@ "type": "tidelift" } ], - "time": "2024-11-24T22:18:30+00:00" + "time": "2024-11-29T15:31:04+00:00" }, { "name": "symfony/ux-turbo", @@ -8626,12 +8606,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "23deaf13a4de289b99e86828172ee0ee065d8f9c" + "reference": "f7af0aa09190354dd4630ea330d8a3fc3e8ef278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/23deaf13a4de289b99e86828172ee0ee065d8f9c", - "reference": "23deaf13a4de289b99e86828172ee0ee065d8f9c", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/f7af0aa09190354dd4630ea330d8a3fc3e8ef278", + "reference": "f7af0aa09190354dd4630ea330d8a3fc3e8ef278", "shasum": "" }, "require": { @@ -8667,8 +8647,8 @@ "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -8701,7 +8681,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/2.x" + "source": "https://github.com/symfony/ux-turbo/tree/v2.22.0" }, "funding": [ { @@ -8717,7 +8697,7 @@ "type": "tidelift" } ], - "time": "2024-11-20T07:57:38+00:00" + "time": "2024-11-29T15:25:16+00:00" }, { "name": "symfony/ux-twig-component", @@ -8758,8 +8738,8 @@ "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -8785,7 +8765,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-twig-component/tree/2.x" + "source": "https://github.com/symfony/ux-twig-component/tree/v2.22.0" }, "funding": [ { @@ -8805,7 +8785,7 @@ }, { "name": "symfony/validator", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", @@ -8882,7 +8862,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/7.2" + "source": "https://github.com/symfony/validator/tree/v7.2.0" }, "funding": [ { @@ -8902,16 +8882,16 @@ }, { "name": "symfony/var-dumper", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" + "reference": "340357866b7ebea88d2f325c167cb5e4dd3383e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/340357866b7ebea88d2f325c167cb5e4dd3383e4", + "reference": "340357866b7ebea88d2f325c167cb5e4dd3383e4", "shasum": "" }, "require": { @@ -8965,7 +8945,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/7.2" + "source": "https://github.com/symfony/var-dumper/tree/7.3" }, "funding": [ { @@ -8981,11 +8961,11 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:48:14+00:00" + "time": "2024-11-28T14:07:15+00:00" }, { "name": "symfony/var-exporter", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", @@ -9041,7 +9021,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/7.2" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.0" }, "funding": [ { @@ -9059,9 +9039,92 @@ ], "time": "2024-10-18T07:58:17+00:00" }, + { + "name": "symfony/web-link", + "version": "7.3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-link.git", + "reference": "f537556a885e14a1d28f6c759d41e57e93d0a532" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-link/zipball/f537556a885e14a1d28f6c759d41e57e93d0a532", + "reference": "f537556a885e14a1d28f6c759d41e57e93d0a532", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/link": "^1.1|^2.0" + }, + "conflict": { + "symfony/http-kernel": "<6.4" + }, + "provide": { + "psr/link-implementation": "1.0|2.0" + }, + "require-dev": { + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\WebLink\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages links between resources", + "homepage": "https://symfony.com", + "keywords": [ + "dns-prefetch", + "http", + "http2", + "link", + "performance", + "prefetch", + "preload", + "prerender", + "psr13", + "push" + ], + "support": { + "source": "https://github.com/symfony/web-link/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, { "name": "symfony/yaml", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", @@ -9113,7 +9176,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/7.2" + "source": "https://github.com/symfony/yaml/tree/v7.2.0" }, "funding": [ { @@ -9299,7 +9362,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.15.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.16.0" }, "funding": [ { @@ -9319,12 +9382,12 @@ "source": { "type": "git", "url": "https://github.com/twigphp/markdown-extra.git", - "reference": "25f23c02936f8c7157a8413154c06a462c9c20d3" + "reference": "76219b06e104a706879752e6e4d79f63ef7e9f23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/25f23c02936f8c7157a8413154c06a462c9c20d3", - "reference": "25f23c02936f8c7157a8413154c06a462c9c20d3", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/76219b06e104a706879752e6e4d79f63ef7e9f23", + "reference": "76219b06e104a706879752e6e4d79f63ef7e9f23", "shasum": "" }, "require": { @@ -9333,7 +9396,7 @@ "twig/twig": "^3.13|^4.0" }, "require-dev": { - "erusev/parsedown": "^1.7", + "erusev/parsedown": "dev-master as 1.x-dev", "league/commonmark": "^1.0|^2.0", "league/html-to-markdown": "^4.8|^5.0", "michelf/php-markdown": "^1.8|^2.0", @@ -9372,7 +9435,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/markdown-extra/tree/v3.15.0" + "source": "https://github.com/twigphp/markdown-extra/tree/3.x" }, "funding": [ { @@ -9384,7 +9447,7 @@ "type": "tidelift" } ], - "time": "2024-09-03T20:17:35+00:00" + "time": "2024-12-02T08:57:02+00:00" }, { "name": "twig/string-extra", @@ -9392,12 +9455,12 @@ "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", - "reference": "3f90208078a7d55ad4a561301ee3929d3e3840e0" + "reference": "cb4eec11de02f63ad8ea9d065a1f27752d0bf752" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/string-extra/zipball/3f90208078a7d55ad4a561301ee3929d3e3840e0", - "reference": "3f90208078a7d55ad4a561301ee3929d3e3840e0", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/cb4eec11de02f63ad8ea9d065a1f27752d0bf752", + "reference": "cb4eec11de02f63ad8ea9d065a1f27752d0bf752", "shasum": "" }, "require": { @@ -9452,20 +9515,20 @@ "type": "tidelift" } ], - "time": "2024-11-20T13:10:15+00:00" + "time": "2024-11-30T08:42:13+00:00" }, { "name": "twig/twig", - "version": "3.14.x-dev", + "version": "3.x-dev", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a" + "reference": "57bf519af2bd60fe181fd632bd268e73daab807f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", - "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/57bf519af2bd60fe181fd632bd268e73daab807f", + "reference": "57bf519af2bd60fe181fd632bd268e73daab807f", "shasum": "" }, "require": { @@ -9476,9 +9539,11 @@ "symfony/polyfill-php81": "^1.29" }, "require-dev": { + "phpstan/phpstan": "^2.0", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, + "default-branch": true, "type": "library", "autoload": { "files": [ @@ -9519,7 +9584,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.14.2" + "source": "https://github.com/twigphp/Twig/tree/3.x" }, "funding": [ { @@ -9531,7 +9596,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T12:36:22+00:00" + "time": "2024-12-02T09:21:10+00:00" }, { "name": "webmozart/assert", @@ -9919,12 +9984,12 @@ "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "4fe0771f27e0d61e227d8b5a5b0fef8e5d138c1b" + "reference": "23534bff9eb778be9b1c55570548492741c3393c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/4fe0771f27e0d61e227d8b5a5b0fef8e5d138c1b", - "reference": "4fe0771f27e0d61e227d8b5a5b0fef8e5d138c1b", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/23534bff9eb778be9b1c55570548492741c3393c", + "reference": "23534bff9eb778be9b1c55570548492741c3393c", "shasum": "" }, "require": { @@ -10015,7 +10080,7 @@ "type": "github" } ], - "time": "2024-11-25T12:11:49+00:00" + "time": "2024-11-30T08:32:38+00:00" }, { "name": "masterminds/html5", @@ -10377,12 +10442,12 @@ "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "f9e84e0add3ebffc48f7a9eaed0d869f8112dd1e" + "reference": "f8d27d5b81b23d9b679ca2ccac09261c461a15f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f9e84e0add3ebffc48f7a9eaed0d869f8112dd1e", - "reference": "f9e84e0add3ebffc48f7a9eaed0d869f8112dd1e", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f8d27d5b81b23d9b679ca2ccac09261c461a15f4", + "reference": "f8d27d5b81b23d9b679ca2ccac09261c461a15f4", "shasum": "" }, "require": { @@ -10428,7 +10493,7 @@ "type": "github" } ], - "time": "2024-11-27T15:10:00+00:00" + "time": "2024-12-02T07:51:15+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -10436,12 +10501,12 @@ "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "410ed26764d092437dcfe6179676d7089b784a84" + "reference": "bdb6a835c5aa9725979694ae9b70591e180f4853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/410ed26764d092437dcfe6179676d7089b784a84", - "reference": "410ed26764d092437dcfe6179676d7089b784a84", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/bdb6a835c5aa9725979694ae9b70591e180f4853", + "reference": "bdb6a835c5aa9725979694ae9b70591e180f4853", "shasum": "" }, "require": { @@ -10498,9 +10563,9 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.x" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.1" }, - "time": "2024-11-20T15:58:40+00:00" + "time": "2024-12-02T16:48:00+00:00" }, { "name": "phpstan/phpstan-phpunit", @@ -11004,12 +11069,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c4ccbf6978839f4113e9ecf6c9ad645429cb4301" + "reference": "e75fd04dce45b3a064a44107d8037b411ecbd307" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c4ccbf6978839f4113e9ecf6c9ad645429cb4301", - "reference": "c4ccbf6978839f4113e9ecf6c9ad645429cb4301", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e75fd04dce45b3a064a44107d8037b411ecbd307", + "reference": "e75fd04dce45b3a064a44107d8037b411ecbd307", "shasum": "" }, "require": { @@ -11097,7 +11162,7 @@ "type": "tidelift" } ], - "time": "2024-11-26T13:36:09+00:00" + "time": "2024-11-30T07:38:36+00:00" }, { "name": "react/cache", @@ -12558,7 +12623,7 @@ }, { "name": "symfony/browser-kit", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", @@ -12606,7 +12671,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/7.2" + "source": "https://github.com/symfony/browser-kit/tree/v7.2.0" }, "funding": [ { @@ -12626,7 +12691,7 @@ }, { "name": "symfony/css-selector", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -12671,7 +12736,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/7.2" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -12691,7 +12756,7 @@ }, { "name": "symfony/debug-bundle", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", @@ -12745,7 +12810,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/7.2" + "source": "https://github.com/symfony/debug-bundle/tree/v7.2.0" }, "funding": [ { @@ -12765,7 +12830,7 @@ }, { "name": "symfony/dom-crawler", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -12812,7 +12877,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/7.2" + "source": "https://github.com/symfony/dom-crawler/tree/v7.2.0" }, "funding": [ { @@ -12924,7 +12989,7 @@ }, { "name": "symfony/phpunit-bridge", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", @@ -12953,8 +13018,8 @@ "type": "symfony-bridge", "extra": { "thanks": { - "name": "phpunit/phpunit", - "url": "https://github.com/sebastianbergmann/phpunit" + "url": "https://github.com/sebastianbergmann/phpunit", + "name": "phpunit/phpunit" } }, "autoload": { @@ -12986,7 +13051,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/7.2" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.2.0" }, "funding": [ { @@ -13006,7 +13071,7 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "7.2.x-dev", + "version": "7.3.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", @@ -13068,7 +13133,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/7.2" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.2.0" }, "funding": [ { @@ -13142,12 +13207,12 @@ "source": { "type": "git", "url": "https://github.com/VincentLanglet/Twig-CS-Fixer.git", - "reference": "595fe48a3bf43282d21e6930e433d22014f9ecbd" + "reference": "0c50bdb80b2de1a39e6d3d3ad96255a0ebdbeab0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/VincentLanglet/Twig-CS-Fixer/zipball/595fe48a3bf43282d21e6930e433d22014f9ecbd", - "reference": "595fe48a3bf43282d21e6930e433d22014f9ecbd", + "url": "https://api.github.com/repos/VincentLanglet/Twig-CS-Fixer/zipball/0c50bdb80b2de1a39e6d3d3ad96255a0ebdbeab0", + "reference": "0c50bdb80b2de1a39e6d3d3ad96255a0ebdbeab0", "shasum": "" }, "require": { @@ -13207,7 +13272,7 @@ "homepage": "https://github.com/VincentLanglet/Twig-CS-Fixer", "support": { "issues": "https://github.com/VincentLanglet/Twig-CS-Fixer/issues", - "source": "https://github.com/VincentLanglet/Twig-CS-Fixer/tree/3.3.1" + "source": "https://github.com/VincentLanglet/Twig-CS-Fixer/tree/main" }, "funding": [ { @@ -13215,7 +13280,7 @@ "type": "github" } ], - "time": "2024-11-06T16:21:28+00:00" + "time": "2024-11-30T08:25:10+00:00" } ], "aliases": [], diff --git a/config/packages/sensiolabs_typescript.yaml b/config/packages/sensiolabs_typescript.yaml index 7f33f23..604fcbc 100644 --- a/config/packages/sensiolabs_typescript.yaml +++ b/config/packages/sensiolabs_typescript.yaml @@ -1,2 +1,2 @@ sensiolabs_typescript: - swc_version: v1.9.3 + swc_binary: "node_modules/.bin/swc" diff --git a/devenv.lock b/devenv.lock index 96d0062..6b5f771 100644 --- a/devenv.lock +++ b/devenv.lock @@ -3,10 +3,10 @@ "devenv": { "locked": { "dir": "src/modules", - "lastModified": 1732585607, + "lastModified": 1732896163, "owner": "cachix", "repo": "devenv", - "rev": "a520f05c40ebecaf5e17064b27e28ba8e70c49fb", + "rev": "2c928a199d56191d7a53f29ccafa56238c8ce4e5", "type": "github" }, "original": { @@ -53,10 +53,10 @@ }, "nixpkgs": { "locked": { - "lastModified": 1732617236, + "lastModified": 1733064805, "owner": "nixos", "repo": "nixpkgs", - "rev": "af51545ec9a44eadf3fe3547610a5cdd882bc34e", + "rev": "31d66ae40417bb13765b0ad75dd200400e98de84", "type": "github" }, "original": { @@ -68,10 +68,10 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1732632634, + "lastModified": 1733016324, "owner": "NixOS", "repo": "nixpkgs", - "rev": "6f6076c37180ea3a916f84928cf3a714c5207a30", + "rev": "7e1ca67996afd8233d9033edd26e442836cc2ad6", "type": "github" }, "original": { diff --git a/devenv.nix b/devenv.nix index 930ad06..769b5dd 100644 --- a/devenv.nix +++ b/devenv.nix @@ -7,7 +7,7 @@ env.GREET = "devenv"; # https://devenv.sh/packages/ - packages = [ pkgs.git ]; + packages = [ pkgs.git pkgs.hadolint ]; # https://devenv.sh/languages/ languages.php.enable = true; diff --git a/frankenphp/Caddyfile b/frankenphp/Caddyfile index 46186c7..402349c 100644 --- a/frankenphp/Caddyfile +++ b/frankenphp/Caddyfile @@ -15,6 +15,7 @@ {$SERVER_NAME:localhost} { log { + {$CADDY_SERVER_LOG_OPTIONS} # Redact the authorization query parameter that can be set by Mercure format filter { request>uri query { @@ -23,13 +24,24 @@ } } - root * /app/public + root /app/public encode zstd br gzip + vulcain + {$CADDY_SERVER_EXTRA_DIRECTIVES} # Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics header ?Permissions-Policy "browsing-topics=()" - php_server + @phpRoute { + not path /.well-known/mercure* + not file {path} + } + rewrite @phpRoute index.php + + @frontController path index.php + php @frontController + + file_server } \ No newline at end of file diff --git a/frankenphp/conf.d/10-app.ini b/frankenphp/conf.d/10-app.ini index 21a279a..2806027 100644 --- a/frankenphp/conf.d/10-app.ini +++ b/frankenphp/conf.d/10-app.ini @@ -11,4 +11,4 @@ realpath_cache_ttl = 600 opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 20000 opcache.memory_consumption = 256 -opcache.enable_file_override = 1 \ No newline at end of file +opcache.enable_file_override = 1 diff --git a/frankenphp/conf.d/20-app.prod.ini b/frankenphp/conf.d/20-app.prod.ini index 0e712f6..54a4cdf 100644 --- a/frankenphp/conf.d/20-app.prod.ini +++ b/frankenphp/conf.d/20-app.prod.ini @@ -1,2 +1,3 @@ opcache.preload_user = root -opcache.preload = /app/config/preload.php \ No newline at end of file +opcache.preload = /app/config/preload.php +opcache.validate_timestamps = 0 \ No newline at end of file diff --git a/frankenphp/docker-entrypoint.sh b/frankenphp/docker-entrypoint.sh index 5ec5f2d..5af3f41 100644 --- a/frankenphp/docker-entrypoint.sh +++ b/frankenphp/docker-entrypoint.sh @@ -2,43 +2,52 @@ set -e if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then - if [ -z "$(ls -A 'vendor/' 2>/dev/null)" ]; then - composer install --prefer-dist --no-progress --no-interaction - fi - - if grep -q ^DATABASE_URL= .env; then - echo "Waiting for database to be ready..." - ATTEMPTS_LEFT_TO_REACH_DATABASE=60 - until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do - if [ $? -eq 255 ]; then - # If the Doctrine command exits with 255, an unrecoverable error occurred - ATTEMPTS_LEFT_TO_REACH_DATABASE=0 - break - fi - sleep 1 - ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1)) - echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left." - done - - if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then - echo "The database is not up or not reachable:" - echo "$DATABASE_ERROR" - exit 1 - else - echo "The database is now ready and reachable" - fi - - if [ "$( find ./migrations -iname '*.php' -print -quit )" ]; then - php bin/console doctrine:migrations:migrate --no-interaction --all-or-nothing - fi - fi - - echo "Updating Meilisearch indexes..." - php bin/console meili:clear || true - php bin/console meili:import --update-settings || true - - setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var - setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var + if [ -z "$(ls -A 'vendor/' 2>/dev/null)" ]; then + composer install --prefer-dist --no-progress --no-interaction + fi + + if [ -z "$(ls -A 'node_modules/' 2>/dev/null)" ]; then + corepnpm prepare && pnpm install --prod --prefer-frozen-lockfile + fi + + if grep -q ^DATABASE_URL= .env; then + echo "Waiting for database to be ready..." + ATTEMPTS_LEFT_TO_REACH_DATABASE=60 + until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do + if [ $? -eq 255 ]; then + # If the Doctrine command exits with 255, an unrecoverable error occurred + ATTEMPTS_LEFT_TO_REACH_DATABASE=0 + break + fi + sleep 1 + ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1)) + echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left." + done + + if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then + echo "The database is not up or not reachable:" + echo "$DATABASE_ERROR" + exit 1 + else + echo "The database is now ready and reachable" + fi + + if [ "$( find ./migrations -iname '*.php' -print -quit )" ]; then + php bin/console doctrine:migrations:migrate --no-interaction --all-or-nothing + fi + fi + + echo "Updating Meilisearch indexes..." + php bin/console meili:clear || true + php bin/console meili:import --update-settings || true + + setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var + setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var +fi + +if [ "$APP_ENV" = "dev" ]; then + php bin/console sass:build --watch & + php bin/console typescript:build --watch & fi exec docker-php-entrypoint "$@" \ No newline at end of file diff --git a/importmap.php b/importmap.php index 145004d..c37c8d7 100644 --- a/importmap.php +++ b/importmap.php @@ -28,7 +28,7 @@ 'path' => './vendor/twbs/bootstrap/dist/js/bootstrap.esm.js', ], 'chart.js' => [ - 'version' => '4.4.6', + 'version' => '4.4.7', ], '@hotwired/stimulus' => [ 'version' => '3.2.2', @@ -56,7 +56,7 @@ 'version' => '6.4.1', ], '@codemirror/language' => [ - 'version' => '6.10.5', + 'version' => '6.10.6', ], '@codemirror/commands' => [ 'version' => '6.7.1', @@ -68,7 +68,7 @@ 'version' => '6.18.3', ], '@codemirror/lint' => [ - 'version' => '6.8.3', + 'version' => '6.8.4', ], '@lezer/highlight' => [ 'version' => '1.2.1', diff --git a/migrations/Version20241201173441.php b/migrations/Version20241201173441.php new file mode 100644 index 0000000..04e8b4e --- /dev/null +++ b/migrations/Version20241201173441.php @@ -0,0 +1,49 @@ +addSql(<<<'SQL' + CREATE TABLE announcement ( + id VARCHAR(255) NOT NULL, + content TEXT NOT NULL, + url TEXT DEFAULT NULL, + published BOOLEAN NOT NULL, + created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, + updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, + PRIMARY KEY(id) + ) + SQL); + $this->addSql(<<<'SQL' + COMMENT ON COLUMN announcement.created_at IS '(DC2Type:datetime_immutable)' + SQL); + $this->addSql(<<<'SQL' + COMMENT ON COLUMN announcement.updated_at IS '(DC2Type:datetime_immutable)' + SQL); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql(<<<'SQL' + DROP TABLE announcement + SQL); + } +} diff --git a/package.json b/package.json index 603a090..b76c669 100644 --- a/package.json +++ b/package.json @@ -7,21 +7,23 @@ "format": "dprint fmt" }, "dependencies": { - "@codemirror/lang-sql": "^6.8.0", - "@codemirror/state": "^6.4.1", - "@symfony/stimulus-bridge": "^3.2.2", - "codemirror": "^6.0.1", - "typescript": "^5.7.2" + "@swc/cli": "^0.5.2", + "@swc/core": "^1.9.3" }, - "packageManager": "pnpm@9.13.2+sha512.88c9c3864450350e65a33587ab801acf946d7c814ed1134da4a924f6df5a2120fd36b46aab68f7cd1d413149112d53c7db3a4136624cfd00ff1846a0c6cef48a", + "packageManager": "pnpm@9.14.4+sha512.c8180b3fbe4e4bca02c94234717896b5529740a6cbadf19fa78254270403ea2f27d4e1d46a08a0f56c89b63dc8ebfd3ee53326da720273794e6200fcf0d184ab", "devDependencies": { - "@eslint/js": "^9.15.0", + "@codemirror/lang-sql": "^6.8.0", + "@codemirror/state": "^6.4.1", + "@eslint/js": "^9.16.0", "@hotwired/stimulus": "^3.2.2", + "@symfony/stimulus-bridge": "^3.2.2", "@types/bootstrap": "^5.2.10", "bootstrap": "^5.3.3", - "dprint": "^0.47.5", - "eslint": "^9.15.0", - "globals": "^15.12.0", - "typescript-eslint": "^8.16.0" + "codemirror": "^6.0.1", + "dprint": "^0.47.6", + "eslint": "^9.16.0", + "globals": "^15.13.0", + "typescript": "^5.7.2", + "typescript-eslint": "^8.17.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60fb856..b10269e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,46 +7,52 @@ settings: importers: .: dependencies: + "@swc/cli": + specifier: ^0.5.2 + version: 0.5.2(@swc/core@1.9.3) + "@swc/core": + specifier: ^1.9.3 + version: 1.9.3 + devDependencies: "@codemirror/lang-sql": specifier: ^6.8.0 version: 6.8.0(@codemirror/view@6.35.0) "@codemirror/state": specifier: ^6.4.1 version: 6.4.1 - "@symfony/stimulus-bridge": - specifier: ^3.2.2 - version: 3.2.2(@hotwired/stimulus@3.2.2) - codemirror: - specifier: ^6.0.1 - version: 6.0.1(@lezer/common@1.2.3) - typescript: - specifier: ^5.7.2 - version: 5.7.2 - devDependencies: "@eslint/js": - specifier: ^9.15.0 - version: 9.15.0 + specifier: ^9.16.0 + version: 9.16.0 "@hotwired/stimulus": specifier: ^3.2.2 version: 3.2.2 + "@symfony/stimulus-bridge": + specifier: ^3.2.2 + version: 3.2.2(@hotwired/stimulus@3.2.2) "@types/bootstrap": specifier: ^5.2.10 version: 5.2.10 bootstrap: specifier: ^5.3.3 version: 5.3.3(@popperjs/core@2.11.8) + codemirror: + specifier: ^6.0.1 + version: 6.0.1(@lezer/common@1.2.3) dprint: - specifier: ^0.47.5 - version: 0.47.5 + specifier: ^0.47.6 + version: 0.47.6 eslint: - specifier: ^9.15.0 - version: 9.15.0 + specifier: ^9.16.0 + version: 9.16.0 globals: - specifier: ^15.12.0 - version: 15.12.0 + specifier: ^15.13.0 + version: 15.13.0 + typescript: + specifier: ^5.7.2 + version: 5.7.2 typescript-eslint: - specifier: ^8.16.0 - version: 8.16.0(eslint@9.15.0)(typescript@5.7.2) + specifier: ^8.17.0 + version: 8.17.0(eslint@9.16.0)(typescript@5.7.2) packages: "@codemirror/autocomplete@6.18.3": @@ -69,14 +75,14 @@ packages: integrity: sha512-aGLmY4OwGqN3TdSx3h6QeA1NrvaYtF7kkoWR/+W7/JzB0gQtJ+VJxewlnE3+VImhA4WVlhmkJr109PefOOhjLg==, } - "@codemirror/language@6.10.5": + "@codemirror/language@6.10.6": resolution: { - integrity: sha512-sECWJyNmwqw6mSO6Qf0IVPHwhEnuYbqHBZaaIbdcXtZ6Y2r5vU/dxgC7K1ppWaJFy8XGtTBC0Pd60qI7NfJreQ==, + integrity: sha512-KrsbdCnxEztLVbB5PycWXFxas4EOyk/fPAfruSOnDDppevQgid2XZ+KbJ9u+fDikP/e7MW7HPBTvTb8JlZK9vA==, } - "@codemirror/lint@6.8.3": + "@codemirror/lint@6.8.4": resolution: { - integrity: sha512-GSGfKxCo867P7EX1k2LoCrjuQFeqVgPGRRsSl4J4c0KMkD+k1y6WYvTQkzv0iZ8JhLJDujEvlnMchv4CZQLh3Q==, + integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==, } "@codemirror/search@6.5.8": @@ -94,58 +100,65 @@ packages: integrity: sha512-I0tYy63q5XkaWsJ8QRv5h6ves7kvtrBWjBcnf/bzohFJQc5c14a1AQRdE8QpPF9eMp5Mq2FMm59TCj1gDfE7kw==, } - "@dprint/darwin-arm64@0.47.5": + "@dprint/darwin-arm64@0.47.6": resolution: { - integrity: sha512-aVa3F//dkvEeNA7DCSlVcLxB0CV6zXpfbJZ/xsd+xgbayCXFuFr7qt0M6T4WP3gkQn5D7Zu8/pbXfRXQXo9qlQ==, + integrity: sha512-DrtKVOH7Ue6QYsqsUfUwBlTkSZNF2j35xqyI6KimUT1ulgUPocLG53JC/Aej9KuSCPmt4M3J40xxPKRgIM4jPA==, } cpu: [arm64] os: [darwin] - "@dprint/darwin-x64@0.47.5": + "@dprint/darwin-x64@0.47.6": resolution: { - integrity: sha512-84lmSLM/idIQ4UBkBHU1chP0WTldRjzLOEN22/XbdB1JGOIVN1pJIIU0lsmVWXaNI4SvGfty+thhGn73SSlQwA==, + integrity: sha512-p16a4lMbAo4RngbNTAmtREnIRI/cOcZFy5wHPIzbCDnnHI+4UyHiAypTrpF8U8EYx1tw3hgih2MyAuupa9Gfag==, } cpu: [x64] os: [darwin] - "@dprint/linux-arm64-glibc@0.47.5": + "@dprint/linux-arm64-glibc@0.47.6": resolution: { - integrity: sha512-Zk7Ut9Trgl2ssGWx0u3YegnRQFXivKaK1fPEimg/uMwdaLtWFGvNs6DACAJk34d883zmDkTQvllqY1kc78CeBg==, + integrity: sha512-WHphnk0oXpNzwJ9cjbddOL+hEZkXTvHxcA2pM1h1kWCBa5m+4qh0fg8YCktckMfHx1qdQuZYWRoT4l7yQbzWYA==, } cpu: [arm64] os: [linux] - "@dprint/linux-arm64-musl@0.47.5": + "@dprint/linux-arm64-musl@0.47.6": resolution: { - integrity: sha512-KmCu1yX5+/2MbT9n0iAgSK1gc6sQBcDayq8QRO7TRSs+gTDAZ/yQXHkhLdlk5fWsTR1mDQPVRG+2nAjHDhk8EA==, + integrity: sha512-/2cSPudajg8J0U69ldNZkJx5QiKZNh+ohNVM9leWZ8v6GXN6sJDHX3T6hzS3ohIb03YOCiLOrJZDy9j3+fSgdQ==, } cpu: [arm64] os: [linux] - "@dprint/linux-x64-glibc@0.47.5": + "@dprint/linux-riscv64-glibc@0.47.6": resolution: { - integrity: sha512-oBwENMikvcM+eT6JdliMIM+TOiV4VuBJGK+AN1sTOW45VeiYvmzGPOQwCxVeFq4MnZkMfrycC/PAY3C7Vcuh6w==, + integrity: sha512-RMHJ3Zuzpls426upHlAveVwlGMi8oBLzhiCauyC/yWQl3CkGTAYdyhEpGnux0+RxacysfIL2bd8ourx4K0Sx3w==, + } + cpu: [riscv64] + os: [linux] + + "@dprint/linux-x64-glibc@0.47.6": + resolution: { + integrity: sha512-4zbVsx/a8lHkRyAjfW0PNlN5IMwOJfFapgXNYJowWNO7X3j3m1jYJWovjmdZls+d6pDeOHoanMWtq95wd7zTeQ==, } cpu: [x64] os: [linux] - "@dprint/linux-x64-musl@0.47.5": + "@dprint/linux-x64-musl@0.47.6": resolution: { - integrity: sha512-B1IGyaP0k25JDhqmR/UpvgyNtnclBoXV7ZNQbvygehBkTeC69afwzpUxjQ2pKj2F9bl1Rby//fhsAFOg60PzsA==, + integrity: sha512-0C13t4OVzomgQjvUyD5IrRyjLDhGuOtqMo00uJlwn3QHucfgOBqkjyQ5fq7T6+grBse0m14/EWblvSbYkZpyDw==, } cpu: [x64] os: [linux] - "@dprint/win32-arm64@0.47.5": + "@dprint/win32-arm64@0.47.6": resolution: { - integrity: sha512-tKSPwGWsKc+QAdsx6UQav9AY8WXm+B5Mx23ujliJJMRss6Dnlmg17NjbAnSBSqXSrfqaMeQx6d4gujPpOS3F9A==, + integrity: sha512-UOkeFMBdGIuGNwfkrJdVM9eNiRMdbZRRGVy0Cdo2AXn/FCDVqZ74KJkvYVcoUE27GCytHi4Sp1s4at7659WCOw==, } cpu: [arm64] os: [win32] - "@dprint/win32-x64@0.47.5": + "@dprint/win32-x64@0.47.6": resolution: { - integrity: sha512-ljbrGv5rDR00ziBFY6V+qLhtLHm2dsjgiFG9OU7kr3vHEj4eN31nwxU5W2mh0eMoRk7IbcJ5ahTJDLgoYdvfgw==, + integrity: sha512-i9xwXR8V8Jk/wU1gsYKx15eb0ypBRbRZFkHsnHfC0ZBimcfEOibGnGcfv+UCUcumXtnV46TnBqaJW7H70J1J+A==, } cpu: [x64] os: [win32] @@ -182,9 +195,9 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@eslint/js@9.15.0": + "@eslint/js@9.16.0": resolution: { - integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==, + integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } @@ -257,6 +270,140 @@ packages: integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==, } + "@napi-rs/nice-android-arm-eabi@1.0.1": + resolution: { + integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==, + } + engines: { node: ">= 10" } + cpu: [arm] + os: [android] + + "@napi-rs/nice-android-arm64@1.0.1": + resolution: { + integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [android] + + "@napi-rs/nice-darwin-arm64@1.0.1": + resolution: { + integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + + "@napi-rs/nice-darwin-x64@1.0.1": + resolution: { + integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@napi-rs/nice-freebsd-x64@1.0.1": + resolution: { + integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [freebsd] + + "@napi-rs/nice-linux-arm-gnueabihf@1.0.1": + resolution: { + integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==, + } + engines: { node: ">= 10" } + cpu: [arm] + os: [linux] + + "@napi-rs/nice-linux-arm64-gnu@1.0.1": + resolution: { + integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@napi-rs/nice-linux-arm64-musl@1.0.1": + resolution: { + integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@napi-rs/nice-linux-ppc64-gnu@1.0.1": + resolution: { + integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==, + } + engines: { node: ">= 10" } + cpu: [ppc64] + os: [linux] + + "@napi-rs/nice-linux-riscv64-gnu@1.0.1": + resolution: { + integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==, + } + engines: { node: ">= 10" } + cpu: [riscv64] + os: [linux] + + "@napi-rs/nice-linux-s390x-gnu@1.0.1": + resolution: { + integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==, + } + engines: { node: ">= 10" } + cpu: [s390x] + os: [linux] + + "@napi-rs/nice-linux-x64-gnu@1.0.1": + resolution: { + integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@napi-rs/nice-linux-x64-musl@1.0.1": + resolution: { + integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@napi-rs/nice-win32-arm64-msvc@1.0.1": + resolution: { + integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@napi-rs/nice-win32-ia32-msvc@1.0.1": + resolution: { + integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==, + } + engines: { node: ">= 10" } + cpu: [ia32] + os: [win32] + + "@napi-rs/nice-win32-x64-msvc@1.0.1": + resolution: { + integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@napi-rs/nice@1.0.1": + resolution: { + integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==, + } + engines: { node: ">= 10" } + "@nodelib/fs.scandir@2.1.5": resolution: { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, @@ -280,6 +427,131 @@ packages: integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==, } + "@sec-ant/readable-stream@0.4.1": + resolution: { + integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==, + } + + "@sindresorhus/is@5.6.0": + resolution: { + integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==, + } + engines: { node: ">=14.16" } + + "@swc/cli@0.5.2": + resolution: { + integrity: sha512-ul2qIqjM5bfe9zWLqFDmHZCf9HXXSZZAlZLe4czn+lH4PewO+OWZnQcYCscnJKlbx6MuWjzXVR7gkspjNEJwJA==, + } + engines: { node: ">= 16.14.0" } + hasBin: true + peerDependencies: + "@swc/core": ^1.2.66 + chokidar: ^3.5.1 + peerDependenciesMeta: + chokidar: + optional: true + + "@swc/core-darwin-arm64@1.9.3": + resolution: { + integrity: sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w==, + } + engines: { node: ">=10" } + cpu: [arm64] + os: [darwin] + + "@swc/core-darwin-x64@1.9.3": + resolution: { + integrity: sha512-IaRq05ZLdtgF5h9CzlcgaNHyg4VXuiStnOFpfNEMuI5fm5afP2S0FHq8WdakUz5WppsbddTdplL+vpeApt/WCQ==, + } + engines: { node: ">=10" } + cpu: [x64] + os: [darwin] + + "@swc/core-linux-arm-gnueabihf@1.9.3": + resolution: { + integrity: sha512-Pbwe7xYprj/nEnZrNBvZfjnTxlBIcfApAGdz2EROhjpPj+FBqBa3wOogqbsuGGBdCphf8S+KPprL1z+oDWkmSQ==, + } + engines: { node: ">=10" } + cpu: [arm] + os: [linux] + + "@swc/core-linux-arm64-gnu@1.9.3": + resolution: { + integrity: sha512-AQ5JZiwNGVV/2K2TVulg0mw/3LYfqpjZO6jDPtR2evNbk9Yt57YsVzS+3vHSlUBQDRV9/jqMuZYVU3P13xrk+g==, + } + engines: { node: ">=10" } + cpu: [arm64] + os: [linux] + + "@swc/core-linux-arm64-musl@1.9.3": + resolution: { + integrity: sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg==, + } + engines: { node: ">=10" } + cpu: [arm64] + os: [linux] + + "@swc/core-linux-x64-gnu@1.9.3": + resolution: { + integrity: sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w==, + } + engines: { node: ">=10" } + cpu: [x64] + os: [linux] + + "@swc/core-linux-x64-musl@1.9.3": + resolution: { + integrity: sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg==, + } + engines: { node: ">=10" } + cpu: [x64] + os: [linux] + + "@swc/core-win32-arm64-msvc@1.9.3": + resolution: { + integrity: sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg==, + } + engines: { node: ">=10" } + cpu: [arm64] + os: [win32] + + "@swc/core-win32-ia32-msvc@1.9.3": + resolution: { + integrity: sha512-rqpzNfpAooSL4UfQnHhkW8aL+oyjqJniDP0qwZfGnjDoJSbtPysHg2LpcOBEdSnEH+uIZq6J96qf0ZFD8AGfXA==, + } + engines: { node: ">=10" } + cpu: [ia32] + os: [win32] + + "@swc/core-win32-x64-msvc@1.9.3": + resolution: { + integrity: sha512-3YJJLQ5suIEHEKc1GHtqVq475guiyqisKSoUnoaRtxkDaW5g1yvPt9IoSLOe2mRs7+FFhGGU693RsBUSwOXSdQ==, + } + engines: { node: ">=10" } + cpu: [x64] + os: [win32] + + "@swc/core@1.9.3": + resolution: { + integrity: sha512-oRj0AFePUhtatX+BscVhnzaAmWjpfAeySpM1TCbxA1rtBDeH/JDhi5yYzAKneDYtVtBvA7ApfeuzhMC9ye4xSg==, + } + engines: { node: ">=10" } + peerDependencies: + "@swc/helpers": "*" + peerDependenciesMeta: + "@swc/helpers": + optional: true + + "@swc/counter@0.1.3": + resolution: { + integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, + } + + "@swc/types@0.1.17": + resolution: { + integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==, + } + "@symfony/stimulus-bridge@3.2.2": resolution: { integrity: sha512-kIaUEGPXW7g14zsHkIvQWw8cmfCdXSqsEQx18fuHPBb+R0h8nYPyY+e9uVtTuHlE2wHwAjrJoc6YBBK4a7CpKA==, @@ -288,6 +560,17 @@ packages: peerDependencies: "@hotwired/stimulus": ^3.0 + "@szmarczak/http-timer@5.0.1": + resolution: { + integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==, + } + engines: { node: ">=14.16" } + + "@tokenizer/token@0.3.0": + resolution: { + integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==, + } + "@types/bootstrap@5.2.10": resolution: { integrity: sha512-F2X+cd6551tep0MvVZ6nM8v7XgGN/twpdNDjqS1TUM7YFNEtQYWk+dKAnH+T1gr6QgCoGMPl487xw/9hXooa2g==, @@ -298,6 +581,11 @@ packages: integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, } + "@types/http-cache-semantics@4.0.4": + resolution: { + integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==, + } + "@types/json-schema@7.0.15": resolution: { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, @@ -308,9 +596,9 @@ packages: integrity: sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==, } - "@typescript-eslint/eslint-plugin@8.16.0": + "@typescript-eslint/eslint-plugin@8.17.0": resolution: { - integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==, + integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: @@ -321,9 +609,9 @@ packages: typescript: optional: true - "@typescript-eslint/parser@8.16.0": + "@typescript-eslint/parser@8.17.0": resolution: { - integrity: sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==, + integrity: sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: @@ -333,15 +621,15 @@ packages: typescript: optional: true - "@typescript-eslint/scope-manager@8.16.0": + "@typescript-eslint/scope-manager@8.17.0": resolution: { - integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==, + integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@typescript-eslint/type-utils@8.16.0": + "@typescript-eslint/type-utils@8.17.0": resolution: { - integrity: sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==, + integrity: sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: @@ -351,15 +639,15 @@ packages: typescript: optional: true - "@typescript-eslint/types@8.16.0": + "@typescript-eslint/types@8.17.0": resolution: { - integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==, + integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@typescript-eslint/typescript-estree@8.16.0": + "@typescript-eslint/typescript-estree@8.17.0": resolution: { - integrity: sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==, + integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: @@ -368,9 +656,9 @@ packages: typescript: optional: true - "@typescript-eslint/utils@8.16.0": + "@typescript-eslint/utils@8.17.0": resolution: { - integrity: sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==, + integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: @@ -380,12 +668,72 @@ packages: typescript: optional: true - "@typescript-eslint/visitor-keys@8.16.0": + "@typescript-eslint/visitor-keys@8.17.0": resolution: { - integrity: sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==, + integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@xhmikosr/archive-type@7.0.0": + resolution: { + integrity: sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==, + } + engines: { node: ^14.14.0 || >=16.0.0 } + + "@xhmikosr/bin-check@7.0.3": + resolution: { + integrity: sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==, + } + engines: { node: ">=18" } + + "@xhmikosr/bin-wrapper@13.0.5": + resolution: { + integrity: sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==, + } + engines: { node: ">=18" } + + "@xhmikosr/decompress-tar@8.0.1": + resolution: { + integrity: sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg==, + } + engines: { node: ">=18" } + + "@xhmikosr/decompress-tarbz2@8.0.1": + resolution: { + integrity: sha512-OF+6DysDZP5YTDO8uHuGG6fMGZjc+HszFPBkVltjoje2Cf60hjBg/YP5OQndW1hfwVWOdP7f3CnJiPZHJUTtEg==, + } + engines: { node: ">=18" } + + "@xhmikosr/decompress-targz@8.0.1": + resolution: { + integrity: sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg==, + } + engines: { node: ">=18" } + + "@xhmikosr/decompress-unzip@7.0.0": + resolution: { + integrity: sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ==, + } + engines: { node: ">=18" } + + "@xhmikosr/decompress@10.0.1": + resolution: { + integrity: sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==, + } + engines: { node: ">=18" } + + "@xhmikosr/downloader@15.0.1": + resolution: { + integrity: sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g==, + } + engines: { node: ">=18" } + + "@xhmikosr/os-filter-obj@3.0.0": + resolution: { + integrity: sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==, + } + engines: { node: ^14.14.0 || >=16.0.0 } + acorn-jsx@5.3.2: resolution: { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, @@ -418,21 +766,53 @@ packages: } engines: { node: ">=8" } + arch@3.0.0: + resolution: { + integrity: sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q==, + } + argparse@2.0.1: resolution: { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, } + b4a@1.6.7: + resolution: { + integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==, + } + balanced-match@1.0.2: resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, } + bare-events@2.5.0: + resolution: { + integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==, + } + + base64-js@1.5.1: + resolution: { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + } + big.js@5.2.2: resolution: { integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, } + bin-version-check@5.1.0: + resolution: { + integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==, + } + engines: { node: ">=12" } + + bin-version@6.0.0: + resolution: { + integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==, + } + engines: { node: ">=12" } + bootstrap@5.3.3: resolution: { integrity: sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==, @@ -456,6 +836,28 @@ packages: } engines: { node: ">=8" } + buffer-crc32@0.2.13: + resolution: { + integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, + } + + buffer@5.7.1: + resolution: { + integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, + } + + cacheable-lookup@7.0.0: + resolution: { + integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==, + } + engines: { node: ">=14.16" } + + cacheable-request@10.2.14: + resolution: { + integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==, + } + engines: { node: ">=14.16" } + callsites@3.1.0: resolution: { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, @@ -484,11 +886,29 @@ packages: integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, } + commander@6.2.1: + resolution: { + integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==, + } + engines: { node: ">= 6" } + + commander@8.3.0: + resolution: { + integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, + } + engines: { node: ">= 12" } + concat-map@0.0.1: resolution: { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, } + content-disposition@0.5.4: + resolution: { + integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, + } + engines: { node: ">= 0.6" } + crelt@1.0.6: resolution: { integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==, @@ -511,14 +931,32 @@ packages: supports-color: optional: true + decompress-response@6.0.0: + resolution: { + integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==, + } + engines: { node: ">=10" } + deep-is@0.1.4: resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, } - dprint@0.47.5: + defaults@3.0.0: + resolution: { + integrity: sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==, + } + engines: { node: ">=18" } + + defer-to-connect@2.0.1: + resolution: { + integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==, + } + engines: { node: ">=10" } + + dprint@0.47.6: resolution: { - integrity: sha512-EAP3OLYZXiW66HKMlhu6Gu0o7mzBVTWyMyuAAgT7dBtMX+W+pPJmIwyRUnTRQNyyFO4S7bAaa21rzIgo97Bg9A==, + integrity: sha512-vCQC+IMHVZbISA5pxEj+yshQbozmQoVFA4lzcLlqJ8rzIAH8U+1DKvesN/2Uv3Bqz6rMW6W4WY7pYJQljmiZ8w==, } hasBin: true @@ -552,9 +990,9 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - eslint@9.15.0: + eslint@9.16.0: resolution: { - integrity: sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==, + integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true @@ -594,11 +1032,34 @@ packages: } engines: { node: ">=0.10.0" } + execa@5.1.1: + resolution: { + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, + } + engines: { node: ">=10" } + + ext-list@2.2.2: + resolution: { + integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==, + } + engines: { node: ">=0.10.0" } + + ext-name@5.0.0: + resolution: { + integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==, + } + engines: { node: ">=4" } + fast-deep-equal@3.1.3: resolution: { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, } + fast-fifo@1.3.2: + resolution: { + integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, + } + fast-glob@3.3.2: resolution: { integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, @@ -626,6 +1087,24 @@ packages: } engines: { node: ">=16.0.0" } + file-type@19.6.0: + resolution: { + integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==, + } + engines: { node: ">=18" } + + filename-reserved-regex@3.0.0: + resolution: { + integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + filenamify@6.0.0: + resolution: { + integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==, + } + engines: { node: ">=16" } + fill-range@7.1.1: resolution: { integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, @@ -638,6 +1117,12 @@ packages: } engines: { node: ">=10" } + find-versions@5.1.0: + resolution: { + integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==, + } + engines: { node: ">=12" } + flat-cache@4.0.1: resolution: { integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, @@ -649,6 +1134,24 @@ packages: integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==, } + form-data-encoder@2.1.4: + resolution: { + integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==, + } + engines: { node: ">= 14.17" } + + get-stream@6.0.1: + resolution: { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, + } + engines: { node: ">=10" } + + get-stream@9.0.1: + resolution: { + integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==, + } + engines: { node: ">=18" } + glob-parent@5.1.2: resolution: { integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, @@ -667,12 +1170,23 @@ packages: } engines: { node: ">=18" } - globals@15.12.0: + globals@15.13.0: resolution: { - integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==, + integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==, } engines: { node: ">=18" } + got@13.0.0: + resolution: { + integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==, + } + engines: { node: ">=16" } + + graceful-fs@4.2.11: + resolution: { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } + graphemer@1.4.0: resolution: { integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, @@ -684,6 +1198,28 @@ packages: } engines: { node: ">=8" } + http-cache-semantics@4.1.1: + resolution: { + integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==, + } + + http2-wrapper@2.2.1: + resolution: { + integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==, + } + engines: { node: ">=10.19.0" } + + human-signals@2.1.0: + resolution: { + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, + } + engines: { node: ">=10.17.0" } + + ieee754@1.2.1: + resolution: { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, + } + ignore@5.3.2: resolution: { integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, @@ -702,6 +1238,11 @@ packages: } engines: { node: ">=0.8.19" } + inspect-with-kind@1.0.5: + resolution: { + integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==, + } + is-extglob@2.1.1: resolution: { integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, @@ -720,6 +1261,24 @@ packages: } engines: { node: ">=0.12.0" } + is-plain-obj@1.1.0: + resolution: { + integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, + } + engines: { node: ">=0.10.0" } + + is-stream@2.0.1: + resolution: { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: ">=8" } + + is-stream@4.0.1: + resolution: { + integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==, + } + engines: { node: ">=18" } + isexe@2.0.0: resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, @@ -758,6 +1317,12 @@ packages: integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, } + kind-of@6.0.3: + resolution: { + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, + } + engines: { node: ">=0.10.0" } + levn@0.4.1: resolution: { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, @@ -781,6 +1346,23 @@ packages: integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, } + lowercase-keys@3.0.0: + resolution: { + integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + make-dir@4.0.0: + resolution: { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: ">=10" } + + merge-stream@2.0.0: + resolution: { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } + merge2@1.4.1: resolution: { integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, @@ -793,6 +1375,30 @@ packages: } engines: { node: ">=8.6" } + mime-db@1.53.0: + resolution: { + integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==, + } + engines: { node: ">= 0.6" } + + mimic-fn@2.1.0: + resolution: { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: ">=6" } + + mimic-response@3.1.0: + resolution: { + integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, + } + engines: { node: ">=10" } + + mimic-response@4.0.0: + resolution: { + integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + minimatch@3.1.2: resolution: { integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, @@ -814,12 +1420,36 @@ packages: integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, } + normalize-url@8.0.1: + resolution: { + integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==, + } + engines: { node: ">=14.16" } + + npm-run-path@4.0.1: + resolution: { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + } + engines: { node: ">=8" } + + onetime@5.1.2: + resolution: { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: ">=6" } + optionator@0.9.4: resolution: { integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, } engines: { node: ">= 0.8.0" } + p-cancelable@3.0.0: + resolution: { + integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==, + } + engines: { node: ">=12.20" } + p-limit@3.1.0: resolution: { integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, @@ -850,12 +1480,28 @@ packages: } engines: { node: ">=8" } + peek-readable@5.3.1: + resolution: { + integrity: sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==, + } + engines: { node: ">=14.16" } + + pend@1.2.0: + resolution: { + integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, + } + picomatch@2.3.1: resolution: { integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, } engines: { node: ">=8.6" } + piscina@4.7.0: + resolution: { + integrity: sha512-b8hvkpp9zS0zsfa939b/jXbe64Z2gZv0Ha7FYPNUiDIB1y2AtxcOZdfP8xN8HFjUaqQiT9gRlfjAsoL8vdJ1Iw==, + } + prelude-ls@1.2.1: resolution: { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, @@ -873,47 +1519,137 @@ packages: integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, } + queue-tick@1.0.1: + resolution: { + integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==, + } + + quick-lru@5.1.1: + resolution: { + integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, + } + engines: { node: ">=10" } + + resolve-alpn@1.2.1: + resolution: { + integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==, + } + resolve-from@4.0.0: resolution: { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, } engines: { node: ">=4" } + responselike@3.0.0: + resolution: { + integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==, + } + engines: { node: ">=14.16" } + reusify@1.0.4: resolution: { integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, } engines: { iojs: ">=1.0.0", node: ">=0.10.0" } - run-parallel@1.2.0: + run-parallel@1.2.0: + resolution: { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } + + safe-buffer@5.2.1: + resolution: { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, + } + + schema-utils@3.3.0: + resolution: { + integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, + } + engines: { node: ">= 10.13.0" } + + seek-bzip@2.0.0: + resolution: { + integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==, + } + hasBin: true + + semver-regex@4.0.5: + resolution: { + integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==, + } + engines: { node: ">=12" } + + semver-truncate@3.0.0: + resolution: { + integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==, + } + engines: { node: ">=12" } + + semver@7.6.3: + resolution: { + integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, + } + engines: { node: ">=10" } + hasBin: true + + shebang-command@2.0.0: + resolution: { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } + + shebang-regex@3.0.0: + resolution: { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } + + signal-exit@3.0.7: + resolution: { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } + + slash@3.0.0: + resolution: { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: ">=8" } + + sort-keys-length@1.0.1: + resolution: { + integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==, + } + engines: { node: ">=0.10.0" } + + sort-keys@1.1.2: resolution: { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==, } + engines: { node: ">=0.10.0" } - schema-utils@3.3.0: + source-map@0.7.4: resolution: { - integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, + integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, } - engines: { node: ">= 10.13.0" } + engines: { node: ">= 8" } - semver@7.6.3: + streamx@2.20.2: resolution: { - integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, + integrity: sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==, } - engines: { node: ">=10" } - hasBin: true - shebang-command@2.0.0: + strip-dirs@3.0.0: resolution: { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==, } - engines: { node: ">=8" } - shebang-regex@3.0.0: + strip-final-newline@2.0.0: resolution: { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, } - engines: { node: ">=8" } + engines: { node: ">=6" } strip-json-comments@3.1.1: resolution: { @@ -921,6 +1657,12 @@ packages: } engines: { node: ">=8" } + strtok3@9.1.1: + resolution: { + integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==, + } + engines: { node: ">=16" } + style-mod@4.1.2: resolution: { integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==, @@ -932,15 +1674,36 @@ packages: } engines: { node: ">=8" } + tar-stream@3.1.7: + resolution: { + integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==, + } + + text-decoder@1.2.1: + resolution: { + integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==, + } + + through@2.3.8: + resolution: { + integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, + } + to-regex-range@5.0.1: resolution: { integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, } engines: { node: ">=8.0" } - ts-api-utils@1.4.2: + token-types@6.0.0: resolution: { - integrity: sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==, + integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==, + } + engines: { node: ">=14.16" } + + ts-api-utils@1.4.3: + resolution: { + integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==, } engines: { node: ">=16" } peerDependencies: @@ -952,9 +1715,9 @@ packages: } engines: { node: ">= 0.8.0" } - typescript-eslint@8.16.0: + typescript-eslint@8.17.0: resolution: { - integrity: sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==, + integrity: sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: @@ -971,6 +1734,17 @@ packages: engines: { node: ">=14.17" } hasBin: true + uint8array-extras@1.4.0: + resolution: { + integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==, + } + engines: { node: ">=18" } + + unbzip2-stream@1.4.3: + resolution: { + integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==, + } + uri-js@4.4.1: resolution: { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, @@ -994,6 +1768,12 @@ packages: } engines: { node: ">=0.10.0" } + yauzl@3.2.0: + resolution: { + integrity: sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==, + } + engines: { node: ">=12" } + yocto-queue@0.1.0: resolution: { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, @@ -1001,24 +1781,24 @@ packages: engines: { node: ">=10" } snapshots: - "@codemirror/autocomplete@6.18.3(@codemirror/language@6.10.5)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3)": + "@codemirror/autocomplete@6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3)": dependencies: - "@codemirror/language": 6.10.5 + "@codemirror/language": 6.10.6 "@codemirror/state": 6.4.1 "@codemirror/view": 6.35.0 "@lezer/common": 1.2.3 "@codemirror/commands@6.7.1": dependencies: - "@codemirror/language": 6.10.5 + "@codemirror/language": 6.10.6 "@codemirror/state": 6.4.1 "@codemirror/view": 6.35.0 "@lezer/common": 1.2.3 "@codemirror/lang-sql@6.8.0(@codemirror/view@6.35.0)": dependencies: - "@codemirror/autocomplete": 6.18.3(@codemirror/language@6.10.5)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) - "@codemirror/language": 6.10.5 + "@codemirror/autocomplete": 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + "@codemirror/language": 6.10.6 "@codemirror/state": 6.4.1 "@lezer/common": 1.2.3 "@lezer/highlight": 1.2.1 @@ -1026,7 +1806,7 @@ snapshots: transitivePeerDependencies: - "@codemirror/view" - "@codemirror/language@6.10.5": + "@codemirror/language@6.10.6": dependencies: "@codemirror/state": 6.4.1 "@codemirror/view": 6.35.0 @@ -1035,7 +1815,7 @@ snapshots: "@lezer/lr": 1.4.2 style-mod: 4.1.2 - "@codemirror/lint@6.8.3": + "@codemirror/lint@6.8.4": dependencies: "@codemirror/state": 6.4.1 "@codemirror/view": 6.35.0 @@ -1055,33 +1835,36 @@ snapshots: style-mod: 4.1.2 w3c-keyname: 2.2.8 - "@dprint/darwin-arm64@0.47.5": + "@dprint/darwin-arm64@0.47.6": + optional: true + + "@dprint/darwin-x64@0.47.6": optional: true - "@dprint/darwin-x64@0.47.5": + "@dprint/linux-arm64-glibc@0.47.6": optional: true - "@dprint/linux-arm64-glibc@0.47.5": + "@dprint/linux-arm64-musl@0.47.6": optional: true - "@dprint/linux-arm64-musl@0.47.5": + "@dprint/linux-riscv64-glibc@0.47.6": optional: true - "@dprint/linux-x64-glibc@0.47.5": + "@dprint/linux-x64-glibc@0.47.6": optional: true - "@dprint/linux-x64-musl@0.47.5": + "@dprint/linux-x64-musl@0.47.6": optional: true - "@dprint/win32-arm64@0.47.5": + "@dprint/win32-arm64@0.47.6": optional: true - "@dprint/win32-x64@0.47.5": + "@dprint/win32-x64@0.47.6": optional: true - "@eslint-community/eslint-utils@4.4.1(eslint@9.15.0)": + "@eslint-community/eslint-utils@4.4.1(eslint@9.16.0)": dependencies: - eslint: 9.15.0 + eslint: 9.16.0 eslint-visitor-keys: 3.4.3 "@eslint-community/regexpp@4.12.1": {} @@ -1110,7 +1893,7 @@ snapshots: transitivePeerDependencies: - supports-color - "@eslint/js@9.15.0": {} + "@eslint/js@9.16.0": {} "@eslint/object-schema@2.1.4": {} @@ -1147,6 +1930,74 @@ snapshots: dependencies: "@lezer/common": 1.2.3 + "@napi-rs/nice-android-arm-eabi@1.0.1": + optional: true + + "@napi-rs/nice-android-arm64@1.0.1": + optional: true + + "@napi-rs/nice-darwin-arm64@1.0.1": + optional: true + + "@napi-rs/nice-darwin-x64@1.0.1": + optional: true + + "@napi-rs/nice-freebsd-x64@1.0.1": + optional: true + + "@napi-rs/nice-linux-arm-gnueabihf@1.0.1": + optional: true + + "@napi-rs/nice-linux-arm64-gnu@1.0.1": + optional: true + + "@napi-rs/nice-linux-arm64-musl@1.0.1": + optional: true + + "@napi-rs/nice-linux-ppc64-gnu@1.0.1": + optional: true + + "@napi-rs/nice-linux-riscv64-gnu@1.0.1": + optional: true + + "@napi-rs/nice-linux-s390x-gnu@1.0.1": + optional: true + + "@napi-rs/nice-linux-x64-gnu@1.0.1": + optional: true + + "@napi-rs/nice-linux-x64-musl@1.0.1": + optional: true + + "@napi-rs/nice-win32-arm64-msvc@1.0.1": + optional: true + + "@napi-rs/nice-win32-ia32-msvc@1.0.1": + optional: true + + "@napi-rs/nice-win32-x64-msvc@1.0.1": + optional: true + + "@napi-rs/nice@1.0.1": + optionalDependencies: + "@napi-rs/nice-android-arm-eabi": 1.0.1 + "@napi-rs/nice-android-arm64": 1.0.1 + "@napi-rs/nice-darwin-arm64": 1.0.1 + "@napi-rs/nice-darwin-x64": 1.0.1 + "@napi-rs/nice-freebsd-x64": 1.0.1 + "@napi-rs/nice-linux-arm-gnueabihf": 1.0.1 + "@napi-rs/nice-linux-arm64-gnu": 1.0.1 + "@napi-rs/nice-linux-arm64-musl": 1.0.1 + "@napi-rs/nice-linux-ppc64-gnu": 1.0.1 + "@napi-rs/nice-linux-riscv64-gnu": 1.0.1 + "@napi-rs/nice-linux-s390x-gnu": 1.0.1 + "@napi-rs/nice-linux-x64-gnu": 1.0.1 + "@napi-rs/nice-linux-x64-musl": 1.0.1 + "@napi-rs/nice-win32-arm64-msvc": 1.0.1 + "@napi-rs/nice-win32-ia32-msvc": 1.0.1 + "@napi-rs/nice-win32-x64-msvc": 1.0.1 + optional: true + "@nodelib/fs.scandir@2.1.5": dependencies: "@nodelib/fs.stat": 2.0.5 @@ -1161,6 +2012,75 @@ snapshots: "@popperjs/core@2.11.8": {} + "@sec-ant/readable-stream@0.4.1": {} + + "@sindresorhus/is@5.6.0": {} + + "@swc/cli@0.5.2(@swc/core@1.9.3)": + dependencies: + "@swc/core": 1.9.3 + "@swc/counter": 0.1.3 + "@xhmikosr/bin-wrapper": 13.0.5 + commander: 8.3.0 + fast-glob: 3.3.2 + minimatch: 9.0.5 + piscina: 4.7.0 + semver: 7.6.3 + slash: 3.0.0 + source-map: 0.7.4 + + "@swc/core-darwin-arm64@1.9.3": + optional: true + + "@swc/core-darwin-x64@1.9.3": + optional: true + + "@swc/core-linux-arm-gnueabihf@1.9.3": + optional: true + + "@swc/core-linux-arm64-gnu@1.9.3": + optional: true + + "@swc/core-linux-arm64-musl@1.9.3": + optional: true + + "@swc/core-linux-x64-gnu@1.9.3": + optional: true + + "@swc/core-linux-x64-musl@1.9.3": + optional: true + + "@swc/core-win32-arm64-msvc@1.9.3": + optional: true + + "@swc/core-win32-ia32-msvc@1.9.3": + optional: true + + "@swc/core-win32-x64-msvc@1.9.3": + optional: true + + "@swc/core@1.9.3": + dependencies: + "@swc/counter": 0.1.3 + "@swc/types": 0.1.17 + optionalDependencies: + "@swc/core-darwin-arm64": 1.9.3 + "@swc/core-darwin-x64": 1.9.3 + "@swc/core-linux-arm-gnueabihf": 1.9.3 + "@swc/core-linux-arm64-gnu": 1.9.3 + "@swc/core-linux-arm64-musl": 1.9.3 + "@swc/core-linux-x64-gnu": 1.9.3 + "@swc/core-linux-x64-musl": 1.9.3 + "@swc/core-win32-arm64-msvc": 1.9.3 + "@swc/core-win32-ia32-msvc": 1.9.3 + "@swc/core-win32-x64-msvc": 1.9.3 + + "@swc/counter@0.1.3": {} + + "@swc/types@0.1.17": + dependencies: + "@swc/counter": 0.1.3 + "@symfony/stimulus-bridge@3.2.2(@hotwired/stimulus@3.2.2)": dependencies: "@hotwired/stimulus": 3.2.2 @@ -1170,98 +2090,174 @@ snapshots: loader-utils: 2.0.4 schema-utils: 3.3.0 + "@szmarczak/http-timer@5.0.1": + dependencies: + defer-to-connect: 2.0.1 + + "@tokenizer/token@0.3.0": {} + "@types/bootstrap@5.2.10": dependencies: "@popperjs/core": 2.11.8 "@types/estree@1.0.6": {} + "@types/http-cache-semantics@4.0.4": {} + "@types/json-schema@7.0.15": {} "@types/webpack-env@1.18.5": {} - "@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.7.2))(eslint@9.15.0)(typescript@5.7.2)": + "@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2)": dependencies: "@eslint-community/regexpp": 4.12.1 - "@typescript-eslint/parser": 8.16.0(eslint@9.15.0)(typescript@5.7.2) - "@typescript-eslint/scope-manager": 8.16.0 - "@typescript-eslint/type-utils": 8.16.0(eslint@9.15.0)(typescript@5.7.2) - "@typescript-eslint/utils": 8.16.0(eslint@9.15.0)(typescript@5.7.2) - "@typescript-eslint/visitor-keys": 8.16.0 - eslint: 9.15.0 + "@typescript-eslint/parser": 8.17.0(eslint@9.16.0)(typescript@5.7.2) + "@typescript-eslint/scope-manager": 8.17.0 + "@typescript-eslint/type-utils": 8.17.0(eslint@9.16.0)(typescript@5.7.2) + "@typescript-eslint/utils": 8.17.0(eslint@9.16.0)(typescript@5.7.2) + "@typescript-eslint/visitor-keys": 8.17.0 + eslint: 9.16.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.2(typescript@5.7.2) + ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.7.2)": + "@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.7.2)": dependencies: - "@typescript-eslint/scope-manager": 8.16.0 - "@typescript-eslint/types": 8.16.0 - "@typescript-eslint/typescript-estree": 8.16.0(typescript@5.7.2) - "@typescript-eslint/visitor-keys": 8.16.0 + "@typescript-eslint/scope-manager": 8.17.0 + "@typescript-eslint/types": 8.17.0 + "@typescript-eslint/typescript-estree": 8.17.0(typescript@5.7.2) + "@typescript-eslint/visitor-keys": 8.17.0 debug: 4.3.7 - eslint: 9.15.0 + eslint: 9.16.0 optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/scope-manager@8.16.0": + "@typescript-eslint/scope-manager@8.17.0": dependencies: - "@typescript-eslint/types": 8.16.0 - "@typescript-eslint/visitor-keys": 8.16.0 + "@typescript-eslint/types": 8.17.0 + "@typescript-eslint/visitor-keys": 8.17.0 - "@typescript-eslint/type-utils@8.16.0(eslint@9.15.0)(typescript@5.7.2)": + "@typescript-eslint/type-utils@8.17.0(eslint@9.16.0)(typescript@5.7.2)": dependencies: - "@typescript-eslint/typescript-estree": 8.16.0(typescript@5.7.2) - "@typescript-eslint/utils": 8.16.0(eslint@9.15.0)(typescript@5.7.2) + "@typescript-eslint/typescript-estree": 8.17.0(typescript@5.7.2) + "@typescript-eslint/utils": 8.17.0(eslint@9.16.0)(typescript@5.7.2) debug: 4.3.7 - eslint: 9.15.0 - ts-api-utils: 1.4.2(typescript@5.7.2) + eslint: 9.16.0 + ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/types@8.16.0": {} + "@typescript-eslint/types@8.17.0": {} - "@typescript-eslint/typescript-estree@8.16.0(typescript@5.7.2)": + "@typescript-eslint/typescript-estree@8.17.0(typescript@5.7.2)": dependencies: - "@typescript-eslint/types": 8.16.0 - "@typescript-eslint/visitor-keys": 8.16.0 + "@typescript-eslint/types": 8.17.0 + "@typescript-eslint/visitor-keys": 8.17.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.2(typescript@5.7.2) + ts-api-utils: 1.4.3(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.16.0(eslint@9.15.0)(typescript@5.7.2)": + "@typescript-eslint/utils@8.17.0(eslint@9.16.0)(typescript@5.7.2)": dependencies: - "@eslint-community/eslint-utils": 4.4.1(eslint@9.15.0) - "@typescript-eslint/scope-manager": 8.16.0 - "@typescript-eslint/types": 8.16.0 - "@typescript-eslint/typescript-estree": 8.16.0(typescript@5.7.2) - eslint: 9.15.0 + "@eslint-community/eslint-utils": 4.4.1(eslint@9.16.0) + "@typescript-eslint/scope-manager": 8.17.0 + "@typescript-eslint/types": 8.17.0 + "@typescript-eslint/typescript-estree": 8.17.0(typescript@5.7.2) + eslint: 9.16.0 optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/visitor-keys@8.16.0": + "@typescript-eslint/visitor-keys@8.17.0": dependencies: - "@typescript-eslint/types": 8.16.0 + "@typescript-eslint/types": 8.17.0 eslint-visitor-keys: 4.2.0 + "@xhmikosr/archive-type@7.0.0": + dependencies: + file-type: 19.6.0 + + "@xhmikosr/bin-check@7.0.3": + dependencies: + execa: 5.1.1 + isexe: 2.0.0 + + "@xhmikosr/bin-wrapper@13.0.5": + dependencies: + "@xhmikosr/bin-check": 7.0.3 + "@xhmikosr/downloader": 15.0.1 + "@xhmikosr/os-filter-obj": 3.0.0 + bin-version-check: 5.1.0 + + "@xhmikosr/decompress-tar@8.0.1": + dependencies: + file-type: 19.6.0 + is-stream: 2.0.1 + tar-stream: 3.1.7 + + "@xhmikosr/decompress-tarbz2@8.0.1": + dependencies: + "@xhmikosr/decompress-tar": 8.0.1 + file-type: 19.6.0 + is-stream: 2.0.1 + seek-bzip: 2.0.0 + unbzip2-stream: 1.4.3 + + "@xhmikosr/decompress-targz@8.0.1": + dependencies: + "@xhmikosr/decompress-tar": 8.0.1 + file-type: 19.6.0 + is-stream: 2.0.1 + + "@xhmikosr/decompress-unzip@7.0.0": + dependencies: + file-type: 19.6.0 + get-stream: 6.0.1 + yauzl: 3.2.0 + + "@xhmikosr/decompress@10.0.1": + dependencies: + "@xhmikosr/decompress-tar": 8.0.1 + "@xhmikosr/decompress-tarbz2": 8.0.1 + "@xhmikosr/decompress-targz": 8.0.1 + "@xhmikosr/decompress-unzip": 7.0.0 + graceful-fs: 4.2.11 + make-dir: 4.0.0 + strip-dirs: 3.0.0 + + "@xhmikosr/downloader@15.0.1": + dependencies: + "@xhmikosr/archive-type": 7.0.0 + "@xhmikosr/decompress": 10.0.1 + content-disposition: 0.5.4 + defaults: 3.0.0 + ext-name: 5.0.0 + file-type: 19.6.0 + filenamify: 6.0.0 + get-stream: 6.0.1 + got: 13.0.0 + + "@xhmikosr/os-filter-obj@3.0.0": + dependencies: + arch: 3.0.0 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -1283,12 +2279,32 @@ snapshots: dependencies: color-convert: 2.0.1 + arch@3.0.0: {} + argparse@2.0.1: {} + b4a@1.6.7: {} + balanced-match@1.0.2: {} + bare-events@2.5.0: + optional: true + + base64-js@1.5.1: {} + big.js@5.2.2: {} + bin-version-check@5.1.0: + dependencies: + bin-version: 6.0.0 + semver: 7.6.3 + semver-truncate: 3.0.0 + + bin-version@6.0.0: + dependencies: + execa: 5.1.1 + find-versions: 5.1.0 + bootstrap@5.3.3(@popperjs/core@2.11.8): dependencies: "@popperjs/core": 2.11.8 @@ -1306,6 +2322,25 @@ snapshots: dependencies: fill-range: 7.1.1 + buffer-crc32@0.2.13: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + "@types/http-cache-semantics": 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + callsites@3.1.0: {} chalk@4.1.2: @@ -1315,10 +2350,10 @@ snapshots: codemirror@6.0.1(@lezer/common@1.2.3): dependencies: - "@codemirror/autocomplete": 6.18.3(@codemirror/language@6.10.5)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + "@codemirror/autocomplete": 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) "@codemirror/commands": 6.7.1 - "@codemirror/language": 6.10.5 - "@codemirror/lint": 6.8.3 + "@codemirror/language": 6.10.6 + "@codemirror/lint": 6.8.4 "@codemirror/search": 6.5.8 "@codemirror/state": 6.4.1 "@codemirror/view": 6.35.0 @@ -1331,8 +2366,16 @@ snapshots: color-name@1.1.4: {} + commander@6.2.1: {} + + commander@8.3.0: {} + concat-map@0.0.1: {} + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + crelt@1.0.6: {} cross-spawn@7.0.6: @@ -1345,18 +2388,27 @@ snapshots: dependencies: ms: 2.1.3 + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + deep-is@0.1.4: {} - dprint@0.47.5: + defaults@3.0.0: {} + + defer-to-connect@2.0.1: {} + + dprint@0.47.6: optionalDependencies: - "@dprint/darwin-arm64": 0.47.5 - "@dprint/darwin-x64": 0.47.5 - "@dprint/linux-arm64-glibc": 0.47.5 - "@dprint/linux-arm64-musl": 0.47.5 - "@dprint/linux-x64-glibc": 0.47.5 - "@dprint/linux-x64-musl": 0.47.5 - "@dprint/win32-arm64": 0.47.5 - "@dprint/win32-x64": 0.47.5 + "@dprint/darwin-arm64": 0.47.6 + "@dprint/darwin-x64": 0.47.6 + "@dprint/linux-arm64-glibc": 0.47.6 + "@dprint/linux-arm64-musl": 0.47.6 + "@dprint/linux-riscv64-glibc": 0.47.6 + "@dprint/linux-x64-glibc": 0.47.6 + "@dprint/linux-x64-musl": 0.47.6 + "@dprint/win32-arm64": 0.47.6 + "@dprint/win32-x64": 0.47.6 emojis-list@3.0.0: {} @@ -1371,14 +2423,14 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.15.0: + eslint@9.16.0: dependencies: - "@eslint-community/eslint-utils": 4.4.1(eslint@9.15.0) + "@eslint-community/eslint-utils": 4.4.1(eslint@9.16.0) "@eslint-community/regexpp": 4.12.1 "@eslint/config-array": 0.19.0 "@eslint/core": 0.9.0 "@eslint/eslintrc": 3.2.0 - "@eslint/js": 9.15.0 + "@eslint/js": 9.16.0 "@eslint/plugin-kit": 0.2.3 "@humanfs/node": 0.16.6 "@humanwhocodes/module-importer": 1.0.1 @@ -1428,8 +2480,31 @@ snapshots: esutils@2.0.3: {} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + ext-list@2.2.2: + dependencies: + mime-db: 1.53.0 + + ext-name@5.0.0: + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.2: dependencies: "@nodelib/fs.stat": 2.0.5 @@ -1450,6 +2525,19 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-type@19.6.0: + dependencies: + get-stream: 9.0.1 + strtok3: 9.1.1 + token-types: 6.0.0 + uint8array-extras: 1.4.0 + + filename-reserved-regex@3.0.0: {} + + filenamify@6.0.0: + dependencies: + filename-reserved-regex: 3.0.0 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -1459,6 +2547,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + find-versions@5.1.0: + dependencies: + semver-regex: 4.0.5 + flat-cache@4.0.1: dependencies: flatted: 3.3.2 @@ -1466,6 +2558,15 @@ snapshots: flatted@3.3.2: {} + form-data-encoder@2.1.4: {} + + get-stream@6.0.1: {} + + get-stream@9.0.1: + dependencies: + "@sec-ant/readable-stream": 0.4.1 + is-stream: 4.0.1 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -1476,12 +2577,39 @@ snapshots: globals@14.0.0: {} - globals@15.12.0: {} + globals@15.13.0: {} + + got@13.0.0: + dependencies: + "@sindresorhus/is": 5.6.0 + "@szmarczak/http-timer": 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.11: {} graphemer@1.4.0: {} has-flag@4.0.0: {} + http-cache-semantics@4.1.1: {} + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + human-signals@2.1.0: {} + + ieee754@1.2.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: @@ -1491,6 +2619,10 @@ snapshots: imurmurhash@0.1.4: {} + inspect-with-kind@1.0.5: + dependencies: + kind-of: 6.0.3 + is-extglob@2.1.1: {} is-glob@4.0.3: @@ -1499,6 +2631,12 @@ snapshots: is-number@7.0.0: {} + is-plain-obj@1.1.0: {} + + is-stream@2.0.1: {} + + is-stream@4.0.1: {} + isexe@2.0.0: {} js-yaml@4.1.0: @@ -1517,6 +2655,8 @@ snapshots: dependencies: json-buffer: 3.0.1 + kind-of@6.0.3: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -1534,6 +2674,14 @@ snapshots: lodash.merge@4.6.2: {} + lowercase-keys@3.0.0: {} + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + merge-stream@2.0.0: {} + merge2@1.4.1: {} micromatch@4.0.8: @@ -1541,6 +2689,14 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.53.0: {} + + mimic-fn@2.1.0: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -1553,6 +2709,16 @@ snapshots: natural-compare@1.4.0: {} + normalize-url@8.0.1: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -1562,6 +2728,8 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + p-cancelable@3.0.0: {} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -1578,28 +2746,58 @@ snapshots: path-key@3.1.1: {} + peek-readable@5.3.1: {} + + pend@1.2.0: {} + picomatch@2.3.1: {} + piscina@4.7.0: + optionalDependencies: + "@napi-rs/nice": 1.0.1 + prelude-ls@1.2.1: {} punycode@2.3.1: {} queue-microtask@1.2.3: {} + queue-tick@1.0.1: {} + + quick-lru@5.1.1: {} + + resolve-alpn@1.2.1: {} + resolve-from@4.0.0: {} + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + reusify@1.0.4: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} + schema-utils@3.3.0: dependencies: "@types/json-schema": 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + seek-bzip@2.0.0: + dependencies: + commander: 6.2.1 + + semver-regex@4.0.5: {} + + semver-truncate@3.0.0: + dependencies: + semver: 7.6.3 + semver@7.6.3: {} shebang-command@2.0.0: @@ -1608,19 +2806,68 @@ snapshots: shebang-regex@3.0.0: {} + signal-exit@3.0.7: {} + + slash@3.0.0: {} + + sort-keys-length@1.0.1: + dependencies: + sort-keys: 1.1.2 + + sort-keys@1.1.2: + dependencies: + is-plain-obj: 1.1.0 + + source-map@0.7.4: {} + + streamx@2.20.2: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.1 + optionalDependencies: + bare-events: 2.5.0 + + strip-dirs@3.0.0: + dependencies: + inspect-with-kind: 1.0.5 + is-plain-obj: 1.1.0 + + strip-final-newline@2.0.0: {} + strip-json-comments@3.1.1: {} + strtok3@9.1.1: + dependencies: + "@tokenizer/token": 0.3.0 + peek-readable: 5.3.1 + style-mod@4.1.2: {} supports-color@7.2.0: dependencies: has-flag: 4.0.0 + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.20.2 + + text-decoder@1.2.1: {} + + through@2.3.8: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - ts-api-utils@1.4.2(typescript@5.7.2): + token-types@6.0.0: + dependencies: + "@tokenizer/token": 0.3.0 + ieee754: 1.2.1 + + ts-api-utils@1.4.3(typescript@5.7.2): dependencies: typescript: 5.7.2 @@ -1628,12 +2875,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.16.0(eslint@9.15.0)(typescript@5.7.2): + typescript-eslint@8.17.0(eslint@9.16.0)(typescript@5.7.2): dependencies: - "@typescript-eslint/eslint-plugin": 8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.7.2))(eslint@9.15.0)(typescript@5.7.2) - "@typescript-eslint/parser": 8.16.0(eslint@9.15.0)(typescript@5.7.2) - "@typescript-eslint/utils": 8.16.0(eslint@9.15.0)(typescript@5.7.2) - eslint: 9.15.0 + "@typescript-eslint/eslint-plugin": 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2) + "@typescript-eslint/parser": 8.17.0(eslint@9.16.0)(typescript@5.7.2) + "@typescript-eslint/utils": 8.17.0(eslint@9.16.0)(typescript@5.7.2) + eslint: 9.16.0 optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: @@ -1641,6 +2888,13 @@ snapshots: typescript@5.7.2: {} + uint8array-extras@1.4.0: {} + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -1653,4 +2907,9 @@ snapshots: word-wrap@1.2.5: {} + yauzl@3.2.0: + dependencies: + buffer-crc32: 0.2.13 + pend: 1.2.0 + yocto-queue@0.1.0: {} diff --git a/src/Controller/Admin/AnnouncementCrudController.php b/src/Controller/Admin/AnnouncementCrudController.php new file mode 100644 index 0000000..269f72c --- /dev/null +++ b/src/Controller/Admin/AnnouncementCrudController.php @@ -0,0 +1,29 @@ +render('overview/index.html.twig'); } + + #[Route('/overview/announcements', name: 'app_overview_announcements')] + public function announcements(AnnouncementRepository $announcementRepository): Response + { + $announcements = $announcementRepository->findAllPublished(); + + return $this->render('overview/announcements.html.twig', [ + 'announcements' => $announcements, + ]); + } } diff --git a/src/Entity/Announcement.php b/src/Entity/Announcement.php new file mode 100644 index 0000000..66e0b98 --- /dev/null +++ b/src/Entity/Announcement.php @@ -0,0 +1,77 @@ +id; + } + + public function setId(string $id): static + { + $this->id = $id; + + return $this; + } + + public function getContent(): string + { + return $this->content; + } + + public function setContent(string $content): static + { + $this->content = $content; + + return $this; + } + + public function getUrl(): ?string + { + return $this->url; + } + + public function setUrl(?string $url): static + { + $this->url = $url; + + return $this; + } + + public function isPublished(): bool + { + return $this->published; + } + + public function setPublished(bool $published): static + { + $this->published = $published; + + return $this; + } +} diff --git a/src/Exception/HintException.php b/src/Exception/HintException.php new file mode 100644 index 0000000..0d406be --- /dev/null +++ b/src/Exception/HintException.php @@ -0,0 +1,15 @@ +getMessage()}", previous: $previous); + } +} diff --git a/src/Exception/SqlRunner/QueryExecuteException.php b/src/Exception/QueryExecuteException.php similarity index 91% rename from src/Exception/SqlRunner/QueryExecuteException.php rename to src/Exception/QueryExecuteException.php index 83974d0..a7b634e 100644 --- a/src/Exception/SqlRunner/QueryExecuteException.php +++ b/src/Exception/QueryExecuteException.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Exception\SqlRunner; +namespace App\Exception; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; diff --git a/src/Exception/ResourceException.php b/src/Exception/ResourceException.php deleted file mode 100644 index 4666968..0000000 --- a/src/Exception/ResourceException.php +++ /dev/null @@ -1,18 +0,0 @@ - + */ +class AnnouncementRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Announcement::class); + } + + /** + * @return list + */ + public function findAllPublished(): array + { + return $this->findBy(['published' => true], orderBy: [ + 'createdAt' => 'DESC', + ]); + } +} diff --git a/src/Service/PromptService.php b/src/Service/PromptService.php index 8199cc0..c643119 100644 --- a/src/Service/PromptService.php +++ b/src/Service/PromptService.php @@ -4,6 +4,7 @@ namespace App\Service; +use App\Exception\HintException; use Psr\Log\LoggerInterface; final readonly class PromptService @@ -25,12 +26,14 @@ public function __construct( * @param string $answer the answer to the query * * @return string the complete hint for the user + * + * @throws HintException if the hint cannot be generated */ public function hint(string $query, string $error, string $answer): string { $systemPrompt = <<client->chat()->create([ - 'model' => 'gpt-4o-mini', - 'messages' => [ - [ - 'role' => 'system', - 'content' => [ - [ - 'text' => $systemPrompt, - 'type' => 'text', + $queryXml = htmlspecialchars($query, \ENT_XML1, 'UTF-8'); + $answerXml = htmlspecialchars($answer, \ENT_XML1, 'UTF-8'); + $messageXml = htmlspecialchars($error, \ENT_XML1, 'UTF-8'); + + $input = <<$queryXml + $answerXml + $messageXml + INPUT; + + try { + $response = $this->client->chat()->create([ + 'model' => 'gpt-4o', + 'messages' => [ + [ + 'role' => 'system', + 'content' => [ + [ + 'text' => $systemPrompt, + 'type' => 'text', + ], ], ], - ], - [ - 'role' => 'user', - 'content' => [ - [ - 'text' => "$query\n---\n$error\n---\n$answer", - 'type' => 'text', + [ + 'role' => 'user', + 'content' => [ + [ + 'text' => $input, + 'type' => 'text', + ], ], ], ], - ], - 'temperature' => 0.2, - 'max_tokens' => 2048, - 'top_p' => 1, - 'frequency_penalty' => 0, - 'presence_penalty' => 0, - 'response_format' => [ - 'type' => 'text', - ], - ]); + 'temperature' => 0.2, + 'max_tokens' => 2048, + 'top_p' => 1, + 'frequency_penalty' => 0, + 'presence_penalty' => 0, + 'response_format' => [ + 'type' => 'text', + ], + ]); + } catch (\Throwable $e) { + throw new HintException($e); + } $this->logger->debug('Hinted.', [ + 'query' => $queryXml, + 'answer' => $answerXml, + 'message' => $messageXml, 'response' => $response, ]); diff --git a/src/Service/QuestionSqlRunnerService.php b/src/Service/QuestionSqlRunnerService.php index 4929283..1af8e82 100644 --- a/src/Service/QuestionSqlRunnerService.php +++ b/src/Service/QuestionSqlRunnerService.php @@ -7,9 +7,9 @@ use App\Entity\Question; use App\Entity\SqlRunnerDto\SqlRunnerRequest; use App\Entity\SqlRunnerDto\SqlRunnerResult; -use App\Exception\SqlRunner\QueryExecuteException; -use App\Exception\SqlRunner\RunnerException; -use App\Exception\SqlRunner\SchemaExecuteException; +use App\Exception\QueryExecuteException; +use App\Exception\SchemaExecuteException; +use App\Exception\SqlRunnerException; /** * The {@link SqlRunnerService} that retrieves the answer and schema @@ -32,7 +32,7 @@ public function __construct( * * @throws QueryExecuteException when the query execution fails * @throws SchemaExecuteException when the schema execution fails - * @throws RunnerException when the runner fails (internal error or client error) + * @throws SqlRunnerException when the runner fails (internal error or client error) */ protected function getResult(Question $question, string $query): SqlRunnerResult { @@ -54,7 +54,7 @@ protected function getResult(Question $question, string $query): SqlRunnerResult * * @throws QueryExecuteException when the query execution fails * @throws SchemaExecuteException when the schema execution fails - * @throws RunnerException when the runner fails (internal error or client error) + * @throws SqlRunnerException when the runner fails (internal error or client error) */ public function getAnswerResult(Question $question): SqlRunnerResult { @@ -71,7 +71,7 @@ public function getAnswerResult(Question $question): SqlRunnerResult * * @throws QueryExecuteException when the query execution fails * @throws SchemaExecuteException when the schema execution fails - * @throws RunnerException when the runner fails (internal error or client error) + * @throws SqlRunnerException when the runner fails (internal error or client error) */ public function getQueryResult(Question $question, string $query): SqlRunnerResult { diff --git a/src/Service/SqlRunnerService.php b/src/Service/SqlRunnerService.php index 49936b5..801396b 100644 --- a/src/Service/SqlRunnerService.php +++ b/src/Service/SqlRunnerService.php @@ -7,9 +7,9 @@ use App\Entity\SqlRunnerDto\SqlRunnerRequest; use App\Entity\SqlRunnerDto\SqlRunnerResponse; use App\Entity\SqlRunnerDto\SqlRunnerResult; -use App\Exception\SqlRunner\QueryExecuteException; -use App\Exception\SqlRunner\RunnerException; -use App\Exception\SqlRunner\SchemaExecuteException; +use App\Exception\QueryExecuteException; +use App\Exception\SchemaExecuteException; +use App\Exception\SqlRunnerException; use Symfony\Component\Serializer\Context\Normalizer\ObjectNormalizerContextBuilder; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -41,7 +41,7 @@ public function __construct( * * @throws QueryExecuteException When the query execution fails * @throws SchemaExecuteException When the schema execution fails - * @throws RunnerException When the runner fails (internal error or client error) + * @throws SqlRunnerException When the runner fails (internal error or client error) */ public function runQuery(SqlRunnerRequest $request): SqlRunnerResult { @@ -56,7 +56,7 @@ public function runQuery(SqlRunnerRequest $request): SqlRunnerResult ]); $content = $response->getContent(false); } catch (\Throwable $e) { - throw new RunnerException('CLIENT_ERROR', $e->getMessage(), previous: $e); + throw new SqlRunnerException('CLIENT_ERROR', $e->getMessage(), previous: $e); } try { @@ -67,7 +67,7 @@ public function runQuery(SqlRunnerRequest $request): SqlRunnerResult $this->context, ); } catch (\Throwable $e) { - throw new RunnerException('PROTOCOL_ERROR', $e->getMessage(), $e); + throw new SqlRunnerException('PROTOCOL_ERROR', $e->getMessage(), $e); } if (!$response->isSuccess()) { @@ -80,7 +80,7 @@ public function runQuery(SqlRunnerRequest $request): SqlRunnerResult case 'SCHEMA_ERROR': throw new SchemaExecuteException($response->getMessage()); default: - throw new RunnerException($response->getCode(), $response->getMessage()); + throw new SqlRunnerException($response->getCode(), $response->getMessage()); } } diff --git a/src/Twig/Components/Challenge/Instruction/Modal.php b/src/Twig/Components/Challenge/Instruction/Modal.php index 462215c..04677b2 100644 --- a/src/Twig/Components/Challenge/Instruction/Modal.php +++ b/src/Twig/Components/Challenge/Instruction/Modal.php @@ -9,12 +9,14 @@ use App\Entity\SolutionEventStatus; use App\Entity\SqlRunnerDto\SqlRunnerRequest; use App\Entity\User; +use App\Exception\HintException; use App\Repository\SolutionEventRepository; use App\Service\PointCalculationService; use App\Service\PromptService; use App\Service\SqlRunnerComparer; use App\Service\SqlRunnerService; use Doctrine\ORM\EntityManagerInterface; +use Psr\Log\LoggerInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Translation\TranslatableMessage; @@ -35,6 +37,7 @@ final class Modal public function __construct( private readonly TranslatorInterface $translator, + private readonly LoggerInterface $logger, ) { } @@ -92,7 +95,7 @@ public function instruct( ->setQuery($answer), ); } catch (\Throwable $e) { - $this->flushHint('informative', t('instruction.hint.error', [ + $this->flushHint('informative', t('instruction.hint.answer-wrong', [ '%error%' => $e->getMessage(), ])); @@ -113,8 +116,7 @@ public function instruct( ); } catch (\Throwable $e) { $hint = $promptService->hint($query->getQuery(), $e->getMessage(), $answer); - $hintOpenEvent->setResponse($hint); - + $entityManager->persist($hintOpenEvent->setResponse($hint)); $this->flushHint('hint', $hint); return; @@ -128,12 +130,21 @@ public function instruct( } $compareReason = $compareResult->reason()->trans($translator, 'en_US'); - $hint = $promptService->hint($query->getQuery(), "Different result: {$compareReason}", $answer); - $hintOpenEvent->setResponse($hint); + $hint = $promptService->hint($query->getQuery(), "Different result: {$compareReason}", $answer); + $entityManager->persist($hintOpenEvent->setResponse($hint)); $this->flushHint('hint', $hint); + } catch (HintException $e) { + $this->logger->error('Failed to generate hint', [ + 'exception' => $e, + 'query' => $query->getQuery(), + 'answer' => $answer, + ]); + + $this->flushHint('informative', t('instruction.hint.hint-service-error', [ + '%error%' => $e->getPrevious()?->getMessage() ?? $e->getMessage(), + ])); } finally { - $entityManager->persist($hintOpenEvent); $entityManager->flush(); } } diff --git a/src/Twig/Components/Challenge/Tabs/AnswerQueryResult.php b/src/Twig/Components/Challenge/Tabs/AnswerQueryResult.php index 9e3e544..e29004f 100644 --- a/src/Twig/Components/Challenge/Tabs/AnswerQueryResult.php +++ b/src/Twig/Components/Challenge/Tabs/AnswerQueryResult.php @@ -6,8 +6,8 @@ use App\Entity\ChallengeDto\FallableSqlRunnerResult; use App\Entity\Question; -use App\Exception\SqlRunner\QueryExecuteException; -use App\Exception\SqlRunner\SchemaExecuteException; +use App\Exception\QueryExecuteException; +use App\Exception\SchemaExecuteException; use App\Service\QuestionSqlRunnerService; use Psr\Log\LoggerInterface; use Symfony\UX\TwigComponent\Attribute\AsTwigComponent; diff --git a/src/Twig/Components/Challenge/Tabs/UserQueryResult.php b/src/Twig/Components/Challenge/Tabs/UserQueryResult.php index 3896ad1..38f5957 100644 --- a/src/Twig/Components/Challenge/Tabs/UserQueryResult.php +++ b/src/Twig/Components/Challenge/Tabs/UserQueryResult.php @@ -7,8 +7,8 @@ use App\Entity\ChallengeDto\FallableSqlRunnerResult; use App\Entity\Question; use App\Entity\User; -use App\Exception\SqlRunner\QueryExecuteException; -use App\Exception\SqlRunner\SchemaExecuteException; +use App\Exception\QueryExecuteException; +use App\Exception\SchemaExecuteException; use App\Repository\SolutionEventRepository; use App\Service\QuestionSqlRunnerService; use App\Service\SqlRunnerComparer; diff --git a/templates/base.html.twig b/templates/base.html.twig index ee5b42d..d7634f2 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -7,11 +7,15 @@ + {% block stylesheets %} - - + + + + + diff --git a/templates/components/AppFooter.html.twig b/templates/components/AppFooter.html.twig index 533548c..d74e71f 100644 --- a/templates/components/AppFooter.html.twig +++ b/templates/components/AppFooter.html.twig @@ -10,6 +10,11 @@ GitHub + + + 服務狀態 + + 意見回饋 diff --git a/templates/overview/announcements.html.twig b/templates/overview/announcements.html.twig new file mode 100644 index 0000000..ba74ad1 --- /dev/null +++ b/templates/overview/announcements.html.twig @@ -0,0 +1,18 @@ +{% extends 'base.html.twig' %} + +{% block body %} + + + {% for announcement in announcements %} + + + {{ announcement.content|striptags('')|raw }} + + {% if announcement.url %} + 了解更多 → + {% endif %} + + {% endfor %} + + +{% endblock %} diff --git a/templates/overview/index.html.twig b/templates/overview/index.html.twig index 5c0c545..c3a336a 100644 --- a/templates/overview/index.html.twig +++ b/templates/overview/index.html.twig @@ -10,6 +10,10 @@ 這些是你最近的表現 ↓ + + + + 每週學習概況 diff --git a/tests/SqlRunner/SqlRunnerServiceTest.php b/tests/SqlRunner/SqlRunnerServiceTest.php index 524a51d..6792f5c 100644 --- a/tests/SqlRunner/SqlRunnerServiceTest.php +++ b/tests/SqlRunner/SqlRunnerServiceTest.php @@ -5,7 +5,7 @@ namespace App\Tests\SqlRunner; use App\Entity\SqlRunnerDto\SqlRunnerResponse; -use App\Exception\SqlRunner\RunnerException; +use App\Exception\SqlRunnerException; use Monolog\Test\TestCase; use Symfony\Component\HttpClient\Exception\TransportException; use Symfony\Component\Serializer\SerializerInterface; @@ -16,7 +16,7 @@ final class SqlRunnerServiceTest extends TestCase { public function testRunQueryClientError(): void { - $this->expectException(RunnerException::class); + $this->expectException(SqlRunnerException::class); $this->expectExceptionMessageMatches('/^CLIENT_ERROR: /'); $httpClient = self::createMock(HttpClientInterface::class); @@ -38,7 +38,7 @@ public function testRunQueryClientError(): void public function testRunQueryProtocolError(): void { - $this->expectException(RunnerException::class); + $this->expectException(SqlRunnerException::class); $this->expectExceptionMessageMatches('/^PROTOCOL_ERROR: /'); $httpClient = self::createMock(HttpClientInterface::class); @@ -61,7 +61,7 @@ public function testRunQueryProtocolError(): void public function testRunQueryRunnerException(): void { - $this->expectException(RunnerException::class); + $this->expectException(SqlRunnerException::class); $this->expectExceptionMessage('INTERNAL_ERROR: Internal error'); $httpClient = self::createMock(HttpClientInterface::class); @@ -89,7 +89,7 @@ public function testRunQueryRunnerException(): void public function testRunQueryQueryException(): void { - $this->expectException(\App\Exception\SqlRunner\QueryExecuteException::class); + $this->expectException(\App\Exception\QueryExecuteException::class); $this->expectExceptionMessage('Query error'); $httpClient = self::createMock(HttpClientInterface::class); @@ -117,7 +117,7 @@ public function testRunQueryQueryException(): void public function testRunQuerySchemaException(): void { - $this->expectException(\App\Exception\SqlRunner\SchemaExecuteException::class); + $this->expectException(\App\Exception\SchemaExecuteException::class); $this->expectExceptionMessage('Schema error'); $httpClient = self::createMock(HttpClientInterface::class); @@ -145,7 +145,7 @@ public function testRunQuerySchemaException(): void public function testRunQueryBadPayload(): void { - $this->expectException(RunnerException::class); + $this->expectException(SqlRunnerException::class); $this->expectExceptionMessageMatches('/^BAD_PAYLOAD: /'); $httpClient = self::createMock(HttpClientInterface::class); diff --git a/translations/messages.zh_TW.yaml b/translations/messages.zh_TW.yaml index 8e29058..92a3780 100644 --- a/translations/messages.zh_TW.yaml +++ b/translations/messages.zh_TW.yaml @@ -55,6 +55,10 @@ Mark Closed: 標記為已關閉 New & In Progress: 新問題 & 處理中 Resolved & Closed: 已解決 & 已關閉 Impersonate: 模擬使用者 +System Management: 系統管理 +Announcement: 公告 +URL: 網址 +Published: 發布 result_presenter.tabs.result: 執行結果 result_presenter.tabs.answer: 正確答案 @@ -100,7 +104,8 @@ instruction: hint: not_submitted: 提交答案之後才能請 GPT 提示。 solved: 正確答案不需要提示。 - error: 無法取得正確答案:%error% + answer-wrong: 無法取得正確答案:%error% + hint-service-error: 無法取得提示:%error% feedback: type:
這些是你最近的表現 ↓