diff --git a/composer.json b/composer.json index 541fbb7e..ba4104fb 100644 --- a/composer.json +++ b/composer.json @@ -2,8 +2,11 @@ "name": "tempest/docs", "type": "project", "description": "Documentation website for the Tempest framework", + "repositories": [ + {"type": "path", "url": "../tempest-framework", "symlink": true} + ], "require": { - "tempest/framework": "^2.14.0", + "tempest/framework": "^3.x-dev", "league/commonmark": "^2.8.0", "symfony/yaml": "^7.4.1", "spatie/yaml-front-matter": "^2.1.1", diff --git a/composer.lock b/composer.lock index ccdd0951..ca461328 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": "2d156a1d0cdfbc4446a4165afca841b4", + "content-hash": "96dfd42aee1ed7f93538e99697b868d8", "packages": [ { "name": "assertchris/ellison", @@ -2692,16 +2692,16 @@ }, { "name": "rector/rector", - "version": "2.3.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "f7166355dcf47482f27be59169b0825995f51c7d" + "reference": "9afc1bb43571b25629f353c61a9315b5ef31383a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/f7166355dcf47482f27be59169b0825995f51c7d", - "reference": "f7166355dcf47482f27be59169b0825995f51c7d", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/9afc1bb43571b25629f353c61a9315b5ef31383a", + "reference": "9afc1bb43571b25629f353c61a9315b5ef31383a", "shasum": "" }, "require": { @@ -2740,7 +2740,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.0" + "source": "https://github.com/rectorphp/rector/tree/2.3.1" }, "funding": [ { @@ -2748,7 +2748,7 @@ "type": "github" } ], - "time": "2025-12-25T22:00:18+00:00" + "time": "2026-01-13T15:13:58+00:00" }, { "name": "spatie/browsershot", @@ -4502,17 +4502,11 @@ }, { "name": "tempest/framework", - "version": "v2.14.0", - "source": { - "type": "git", - "url": "https://github.com/tempestphp/tempest-framework.git", - "reference": "7afcdb378399d0d217268a1122f8418fc60a6d60" - }, + "version": "3.x-dev", "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tempestphp/tempest-framework/zipball/7afcdb378399d0d217268a1122f8418fc60a6d60", - "reference": "7afcdb378399d0d217268a1122f8418fc60a6d60", - "shasum": "" + "type": "path", + "url": "../tempest-framework", + "reference": "56ba5ea92d8458038af566391e4eb3279481e02f" }, "require": { "doctrine/inflector": "^2.0", @@ -4536,7 +4530,7 @@ "monolog/monolog": "^3.7.0", "nette/php-generator": "^4.1.6", "nikic/php-parser": "^5.3", - "php": "^8.4", + "php": "^8.5", "psr-discovery/http-client-implementations": "^1.4", "psr-discovery/http-factory-implementations": "^1.2", "psr/cache": "^3.0", @@ -4644,6 +4638,40 @@ ], "type": "library", "autoload": { + "psr-4": { + "Tempest\\Auth\\": "packages/auth/src", + "Tempest\\Cache\\": "packages/cache/src", + "Tempest\\Clock\\": "packages/clock/src", + "Tempest\\CommandBus\\": "packages/command-bus/src", + "Tempest\\Console\\": "packages/console/src", + "Tempest\\Container\\": "packages/container/src", + "Tempest\\Core\\": "packages/core/src", + "Tempest\\Cryptography\\": "packages/cryptography/src", + "Tempest\\Database\\": "packages/database/src", + "Tempest\\DateTime\\": "packages/datetime/src", + "Tempest\\Debug\\": "packages/debug/src", + "Tempest\\Discovery\\": "packages/discovery/src", + "Tempest\\EventBus\\": "packages/event-bus/src", + "Tempest\\Framework\\": "src/Tempest/Framework", + "Tempest\\Generation\\": "packages/generation/src", + "Tempest\\HttpClient\\": "packages/http-client/src", + "Tempest\\Http\\": "packages/http/src", + "Tempest\\Icon\\": "packages/icon/src", + "Tempest\\Intl\\": "packages/intl/src", + "Tempest\\KeyValue\\": "packages/kv-store/src", + "Tempest\\Log\\": "packages/log/src", + "Tempest\\Mail\\": "packages/mail/src", + "Tempest\\Mapper\\": "packages/mapper/src", + "Tempest\\Process\\": "packages/process/src", + "Tempest\\Reflection\\": "packages/reflection/src", + "Tempest\\Router\\": "packages/router/src", + "Tempest\\Storage\\": "packages/storage/src", + "Tempest\\Support\\": "packages/support/src", + "Tempest\\Upgrade\\": "packages/upgrade/src", + "Tempest\\Validation\\": "packages/validation/src", + "Tempest\\View\\": "packages/view/src", + "Tempest\\Vite\\": "packages/vite/src" + }, "files": [ "packages/clock/src/functions.php", "packages/command-bus/src/functions.php", @@ -4678,58 +4706,110 @@ "packages/support/src/functions.php", "packages/view/src/functions.php", "packages/vite/src/functions.php" - ], + ] + }, + "autoload-dev": { "psr-4": { - "Tempest\\Log\\": "packages/log/src", - "Tempest\\Auth\\": "packages/auth/src", - "Tempest\\Core\\": "packages/core/src", - "Tempest\\Http\\": "packages/http/src", - "Tempest\\Icon\\": "packages/icon/src", - "Tempest\\Intl\\": "packages/intl/src", - "Tempest\\Mail\\": "packages/mail/src", - "Tempest\\View\\": "packages/view/src", - "Tempest\\Vite\\": "packages/vite/src", - "Tempest\\Cache\\": "packages/cache/src", - "Tempest\\Clock\\": "packages/clock/src", - "Tempest\\Debug\\": "packages/debug/src", - "Tempest\\Mapper\\": "packages/mapper/src", - "Tempest\\Router\\": "packages/router/src", - "Tempest\\Console\\": "packages/console/src", - "Tempest\\Process\\": "packages/process/src", - "Tempest\\Storage\\": "packages/storage/src", - "Tempest\\Support\\": "packages/support/src", - "Tempest\\Upgrade\\": "packages/upgrade/src", - "Tempest\\Database\\": "packages/database/src", - "Tempest\\DateTime\\": "packages/datetime/src", - "Tempest\\EventBus\\": "packages/event-bus/src", - "Tempest\\KeyValue\\": "packages/kv-store/src", - "Tempest\\Container\\": "packages/container/src", - "Tempest\\Discovery\\": "packages/discovery/src", - "Tempest\\Framework\\": "src/Tempest/Framework", - "Tempest\\CommandBus\\": "packages/command-bus/src", - "Tempest\\Generation\\": "packages/generation/src", - "Tempest\\HttpClient\\": "packages/http-client/src", - "Tempest\\Reflection\\": "packages/reflection/src", - "Tempest\\Validation\\": "packages/validation/src", - "Tempest\\Cryptography\\": "packages/cryptography/src" - } + "Tempest\\Auth\\Tests\\": "packages/auth/tests", + "Tempest\\Cache\\Tests\\": "packages/cache/tests", + "Tempest\\Clock\\Tests\\": "packages/clock/tests", + "Tempest\\CommandBus\\Tests\\": "packages/command-bus/tests", + "Tempest\\Console\\Tests\\": "packages/console/tests", + "Tempest\\Container\\Tests\\": "packages/container/tests", + "Tempest\\Core\\Tests\\": "packages/core/tests", + "Tempest\\Cryptography\\Tests\\": "packages/cryptography/tests", + "Tempest\\Database\\Tests\\": "packages/database/tests", + "Tempest\\DateTime\\Tests\\": "packages/datetime/tests", + "Tempest\\Debug\\Tests\\": "packages/debug/tests", + "Tempest\\EventBus\\Tests\\": "packages/event-bus/tests", + "Tempest\\Generation\\Tests\\": "packages/generation/tests", + "Tempest\\HttpClient\\Tests\\": "packages/http-client/tests", + "Tempest\\Http\\Tests\\": "packages/http/tests", + "Tempest\\Icon\\Tests\\": "packages/icon/tests", + "Tempest\\Intl\\Tests\\": "packages/intl/tests", + "Tempest\\KeyValue\\Tests\\": "packages/kv-store/tests", + "Tempest\\Log\\Tests\\": "packages/log/tests", + "Tempest\\Mail\\Tests\\": "packages/mail/tests", + "Tempest\\Mapper\\Tests\\": "packages/mapper/tests", + "Tempest\\Process\\Tests\\": "packages/process/tests", + "Tempest\\Reflection\\Tests\\": "packages/reflection/tests", + "Tempest\\Router\\Tests\\": "packages/router/tests", + "Tempest\\Storage\\Tests\\": "packages/storage/tests", + "Tempest\\Support\\Tests\\": "packages/support/tests", + "Tempest\\Upgrade\\Tests\\": "packages/upgrade/tests", + "Tempest\\Validation\\Tests\\": "packages/validation/tests", + "Tempest\\View\\Tests\\": "packages/view/tests", + "Tempest\\Vite\\Tests\\": "packages/vite/tests", + "Tests\\Tempest\\": "tests" + } + }, + "scripts": { + "phpunit": [ + "@php -d memory_limit=2G vendor/bin/phpunit --display-warnings --display-skipped --display-deprecations --display-errors --display-notices" + ], + "coverage": [ + "vendor/bin/phpunit --coverage-html build/reports/html --coverage-clover build/reports/clover.xml" + ], + "fmt": [ + "vendor/bin/mago fmt" + ], + "lint:fix": [ + "vendor/bin/mago lint --fix --format-after-fix" + ], + "style": [ + "composer fmt && composer lint:fix" + ], + "test": [ + "composer phpunit" + ], + "test:stop": [ + "composer phpunit -- --stop-on-error --stop-on-failure" + ], + "lint": [ + "vendor/bin/mago lint --potentially-unsafe --minimum-fail-level=note" + ], + "phpstan": [ + "vendor/bin/phpstan analyse src tests --memory-limit=1G" + ], + "rector": [ + "vendor/bin/rector process --no-ansi" + ], + "merge": [ + "php -d\"error_reporting = E_ALL & ~E_DEPRECATED\" vendor/bin/monorepo-builder merge" + ], + "intl:plural": [ + "./packages/intl/bin/plural-rules.php" + ], + "exceptions:dev": [ + "cd ./packages/router/src/Exceptions/local && bun i && bun run dev" + ], + "exceptions:build": [ + "cd ./packages/router/src/Exceptions/local && bun i && bun run build" + ], + "release": [ + "composer qa", + "./bin/release" + ], + "qa": [ + "composer fmt", + "composer lint:fix", + "composer lint", + "composer merge", + "composer rector", + "./bin/validate-packages", + "./tempest discovery:clear --no-interaction", + "composer phpunit", + "composer phpstan", + "composer exceptions:build" + ] }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "The PHP framework that gets out of your way.", - "support": { - "issues": "https://github.com/tempestphp/tempest-framework/issues", - "source": "https://github.com/tempestphp/tempest-framework/tree/v2.14.0" - }, - "funding": [ - { - "url": "https://github.com/tempestphp", - "type": "github" - } - ], - "time": "2025-12-12T08:09:51+00:00" + "transport-options": { + "relative": true + } }, { "name": "tempest/highlight", @@ -6627,7 +6707,9 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": {}, + "stability-flags": { + "tempest/framework": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": {}, diff --git a/deploy.sh b/deploy.sh index 4665406d..4cdf09d9 100644 --- a/deploy.sh +++ b/deploy.sh @@ -4,23 +4,23 @@ . ~/.nvm/nvm.sh # Dependencies -php8.4 /usr/local/bin/composer install --no-dev +php8.5 /usr/local/bin/composer install --no-dev /home/forge/.bun/bin/bun --version /home/forge/.bun/bin/bun install # Tempest -php8.4 tempest cache:clear --force --internal --all -php8.4 tempest discovery:generate -php8.4 tempest migrate:up --force -php8.4 tempest static:clean --force +php8.5 tempest cache:clear --force --internal --all +php8.5 tempest discovery:generate +php8.5 tempest migrate:up --force +php8.5 tempest static:clean --force # Build front-end -php8.4 tempest docs:pull --no-interaction -php8.4 tempest command-palette:index +php8.5 tempest docs:pull --no-interaction +php8.5 tempest command-palette:index /home/forge/.bun/bin/bun run build -php8.4 tempest cache:clear --force -php8.4 tempest view:clear --force -php8.4 tempest static:generate --verbose=true +php8.5 tempest cache:clear --force +php8.5 tempest view:clear --force +php8.5 tempest static:generate --verbose=true # Supervisor sudo supervisorctl restart all diff --git a/rector.php b/rector.php index c3803418..aff7d74a 100644 --- a/rector.php +++ b/rector.php @@ -3,13 +3,14 @@ declare(strict_types=1); use Rector\Config\RectorConfig; +use Tempest\Upgrade\Set\TempestSetList; return RectorConfig::configure() ->withPaths([ __DIR__ . '/src', __DIR__ . '/tests', ]) - ->withSets([__DIR__ . '/vendor/tempest/framework/packages/upgrade/src/tempest2.php']) + ->withSets([TempestSetList::TEMPEST_30]) // ->withPhpSets() ->withTypeCoverageLevel(0) ->withDeadCodeLevel(0) diff --git a/src/Markdown/Alerts/AlertBlockRenderer.php b/src/Markdown/Alerts/AlertBlockRenderer.php index dd60e5c3..10b85208 100644 --- a/src/Markdown/Alerts/AlertBlockRenderer.php +++ b/src/Markdown/Alerts/AlertBlockRenderer.php @@ -13,8 +13,8 @@ use Override; use Tempest\View\ViewRenderer; -use function Tempest\get; -use function Tempest\view; +use function Tempest\Container\get; +use function Tempest\View\view; final class AlertBlockRenderer implements NodeRendererInterface { diff --git a/src/Markdown/SubChapterExtractor.php b/src/Markdown/SubChapterExtractor.php index b090e4e7..c19353df 100644 --- a/src/Markdown/SubChapterExtractor.php +++ b/src/Markdown/SubChapterExtractor.php @@ -4,6 +4,7 @@ namespace App\Markdown; +use function Tempest\Support\Arr\sort_by_callback; use Tempest\Support\Arr; use function Tempest\Support\Str\strip_tags; @@ -40,7 +41,7 @@ public static function extract(string $content): array } return self::buildHierarchy( - headings: Arr\sort_by_callback($headings, static fn (array $a, array $b) => $a['position'] <=> $b['position']), + headings: sort_by_callback($headings, static fn (array $a, array $b) => $a['position'] <=> $b['position']), ); } diff --git a/src/StoredEvents/CreateStoredEventTable.php b/src/StoredEvents/CreateStoredEventTable.php index 70c8f8d8..b5ad1a7f 100644 --- a/src/StoredEvents/CreateStoredEventTable.php +++ b/src/StoredEvents/CreateStoredEventTable.php @@ -4,11 +4,12 @@ namespace App\StoredEvents; +use Tempest\Database\MigratesUp; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\CreateTableStatement; -final class CreateStoredEventTable implements \Tempest\Database\MigratesUp +final class CreateStoredEventTable implements MigratesUp { public string $name { get => '00-00-0000-create_stored_events_table'; diff --git a/src/Support/Sessions/MigrateSessionTable.php b/src/Support/Sessions/MigrateSessionTable.php new file mode 100644 index 00000000..1a9ee32e --- /dev/null +++ b/src/Support/Sessions/MigrateSessionTable.php @@ -0,0 +1,26 @@ +uuid('id') + ->datetime('created_at') + ->datetime('last_active_at') + ->text('data'), + ); + } +} \ No newline at end of file diff --git a/src/Web/Analytics/PackageDownloadsPerDay/CreatePackageDownloadsPerDayTable.php b/src/Web/Analytics/PackageDownloadsPerDay/CreatePackageDownloadsPerDayTable.php index daf322a6..d6ca213c 100644 --- a/src/Web/Analytics/PackageDownloadsPerDay/CreatePackageDownloadsPerDayTable.php +++ b/src/Web/Analytics/PackageDownloadsPerDay/CreatePackageDownloadsPerDayTable.php @@ -4,12 +4,14 @@ namespace App\Web\Analytics\PackageDownloadsPerDay; +use Tempest\Database\MigratesUp; +use Tempest\Database\MigratesDown; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\CreateTableStatement; use Tempest\Database\QueryStatements\DropTableStatement; -final class CreatePackageDownloadsPerDayTable implements \Tempest\Database\MigratesUp, \Tempest\Database\MigratesDown +final class CreatePackageDownloadsPerDayTable implements MigratesUp, MigratesDown { public string $name = '2024-12-14_01_create_package_downloads_per_day_table'; diff --git a/src/Web/Analytics/PackageDownloadsPerDay/UpdatePackageDownloadsPerDayTable.php b/src/Web/Analytics/PackageDownloadsPerDay/UpdatePackageDownloadsPerDayTable.php index ad69102b..32282aca 100644 --- a/src/Web/Analytics/PackageDownloadsPerDay/UpdatePackageDownloadsPerDayTable.php +++ b/src/Web/Analytics/PackageDownloadsPerDay/UpdatePackageDownloadsPerDayTable.php @@ -4,12 +4,13 @@ namespace App\Web\Analytics\PackageDownloadsPerDay; +use Tempest\Database\MigratesUp; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\AlterTableStatement; use Tempest\Database\QueryStatements\IntegerStatement; -final class UpdatePackageDownloadsPerDayTable implements \Tempest\Database\MigratesUp +final class UpdatePackageDownloadsPerDayTable implements MigratesUp { public string $name = '2024-12-14_03_update_package_downloads_per_day_table'; diff --git a/src/Web/Analytics/PackageDownloadsPerHour/CreatePackageDownloadsPerHourTable.php b/src/Web/Analytics/PackageDownloadsPerHour/CreatePackageDownloadsPerHourTable.php index 3296095b..d490a534 100644 --- a/src/Web/Analytics/PackageDownloadsPerHour/CreatePackageDownloadsPerHourTable.php +++ b/src/Web/Analytics/PackageDownloadsPerHour/CreatePackageDownloadsPerHourTable.php @@ -4,12 +4,14 @@ namespace App\Web\Analytics\PackageDownloadsPerHour; +use Tempest\Database\MigratesUp; +use Tempest\Database\MigratesDown; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\CreateTableStatement; use Tempest\Database\QueryStatements\DropTableStatement; -final class CreatePackageDownloadsPerHourTable implements \Tempest\Database\MigratesUp, \Tempest\Database\MigratesDown +final class CreatePackageDownloadsPerHourTable implements MigratesUp, MigratesDown { public string $name = '2024-12-14_01_create_package_downloads_per_hour_table'; diff --git a/src/Web/Analytics/PackageDownloadsPerHour/UpdatePackageDownloadsPerHourTable.php b/src/Web/Analytics/PackageDownloadsPerHour/UpdatePackageDownloadsPerHourTable.php index b4ad8ae4..af12009e 100644 --- a/src/Web/Analytics/PackageDownloadsPerHour/UpdatePackageDownloadsPerHourTable.php +++ b/src/Web/Analytics/PackageDownloadsPerHour/UpdatePackageDownloadsPerHourTable.php @@ -4,12 +4,13 @@ namespace App\Web\Analytics\PackageDownloadsPerHour; +use Tempest\Database\MigratesUp; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\AlterTableStatement; use Tempest\Database\QueryStatements\IntegerStatement; -final class UpdatePackageDownloadsPerHourTable implements \Tempest\Database\MigratesUp +final class UpdatePackageDownloadsPerHourTable implements MigratesUp { public string $name = '2024-12-14_02_update_package_downloads_per_hour_table'; diff --git a/src/Web/Analytics/ParseLogCommand.php b/src/Web/Analytics/ParseLogCommand.php index 891ae11f..a4b18d17 100644 --- a/src/Web/Analytics/ParseLogCommand.php +++ b/src/Web/Analytics/ParseLogCommand.php @@ -10,7 +10,7 @@ use Tempest\Console\ConsoleCommand; use Tempest\Console\HasConsole; -use function Tempest\event; +use function Tempest\EventBus\event; use function Tempest\Support\str; final class ParseLogCommand diff --git a/src/Web/Analytics/ParsePackagistCommand.php b/src/Web/Analytics/ParsePackagistCommand.php index f2a75f93..5fa01853 100644 --- a/src/Web/Analytics/ParsePackagistCommand.php +++ b/src/Web/Analytics/ParsePackagistCommand.php @@ -14,7 +14,7 @@ use Tempest\HttpClient\HttpClient; use Throwable; -use function Tempest\event; +use function Tempest\EventBus\event; final readonly class ParsePackagistCommand { diff --git a/src/Web/Analytics/StatsController.php b/src/Web/Analytics/StatsController.php index 6cbef667..8ef19fb5 100644 --- a/src/Web/Analytics/StatsController.php +++ b/src/Web/Analytics/StatsController.php @@ -11,7 +11,7 @@ use function Tempest\Database\query; use function Tempest\Support\arr; -use function Tempest\view; +use function Tempest\View\view; final readonly class StatsController { @@ -33,7 +33,7 @@ public function __invoke(): View ->all(), )->reverse(); - return view( + return \Tempest\View\view( __DIR__ . '/stats.view.php', visitsPerDay: new Chart( diff --git a/src/Web/Analytics/VisitsPerDay/AlterVisitsPerDayTable.php b/src/Web/Analytics/VisitsPerDay/AlterVisitsPerDayTable.php index 8cad8a25..274dc3ad 100644 --- a/src/Web/Analytics/VisitsPerDay/AlterVisitsPerDayTable.php +++ b/src/Web/Analytics/VisitsPerDay/AlterVisitsPerDayTable.php @@ -4,11 +4,12 @@ namespace App\Web\Analytics\VisitsPerDay; +use Tempest\Database\MigratesUp; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\AlterTableStatement; -final class AlterVisitsPerDayTable implements \Tempest\Database\MigratesUp +final class AlterVisitsPerDayTable implements MigratesUp { public string $name = '2024-12-13_01_alter_visits_table'; diff --git a/src/Web/Analytics/VisitsPerDay/CreateVisitsPerDayTable.php b/src/Web/Analytics/VisitsPerDay/CreateVisitsPerDayTable.php index 478e0990..febed394 100644 --- a/src/Web/Analytics/VisitsPerDay/CreateVisitsPerDayTable.php +++ b/src/Web/Analytics/VisitsPerDay/CreateVisitsPerDayTable.php @@ -4,12 +4,14 @@ namespace App\Web\Analytics\VisitsPerDay; +use Tempest\Database\MigratesUp; +use Tempest\Database\MigratesDown; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\CreateTableStatement; use Tempest\Database\QueryStatements\DropTableStatement; -final class CreateVisitsPerDayTable implements \Tempest\Database\MigratesUp, \Tempest\Database\MigratesDown +final class CreateVisitsPerDayTable implements MigratesUp, MigratesDown { public string $name = '2024-12-12_01_create_visits_table'; diff --git a/src/Web/Analytics/VisitsPerHour/CreateVisitsPerHourTable.php b/src/Web/Analytics/VisitsPerHour/CreateVisitsPerHourTable.php index 2cb4679a..2da414ae 100644 --- a/src/Web/Analytics/VisitsPerHour/CreateVisitsPerHourTable.php +++ b/src/Web/Analytics/VisitsPerHour/CreateVisitsPerHourTable.php @@ -4,12 +4,14 @@ namespace App\Web\Analytics\VisitsPerHour; +use Tempest\Database\MigratesUp; +use Tempest\Database\MigratesDown; use Override; use Tempest\Database\QueryStatement; use Tempest\Database\QueryStatements\CreateTableStatement; use Tempest\Database\QueryStatements\DropTableStatement; -final class CreateVisitsPerHourTable implements \Tempest\Database\MigratesUp, \Tempest\Database\MigratesDown +final class CreateVisitsPerHourTable implements MigratesUp, MigratesDown { public string $name = '2024-12-13_01_create_visits_per_hour_table'; diff --git a/src/Web/Blog/BlogController.php b/src/Web/Blog/BlogController.php index 41397f24..328175de 100644 --- a/src/Web/Blog/BlogController.php +++ b/src/Web/Blog/BlogController.php @@ -18,7 +18,7 @@ use Tempest\View\View; use Tempest\View\ViewRenderer; -use function Tempest\view; +use function Tempest\View\view; final readonly class BlogController { @@ -28,7 +28,7 @@ public function index(BlogRepository $repository): View { $posts = $repository->all(); - return view('./index.view.php', posts: $posts, metaType: MetaType::BLOG); + return \Tempest\View\view('./index.view.php', posts: $posts, metaType: MetaType::BLOG); } #[Get('/blog/{slug}')] @@ -41,7 +41,7 @@ public function show(string $slug, BlogRepository $repository): Response|View return new NotFound(); } - return view('./show.view.php', post: $post); + return \Tempest\View\view('./show.view.php', post: $post); } #[Stateless, Get('/rss', without: [SetCurrentUrlMiddleware::class, VerifyCsrfMiddleware::class])] @@ -52,7 +52,7 @@ public function rss( ): Response { $xml = $cache->resolve( key: 'rss', - callback: static fn () => $viewRenderer->render(view('rss.view.php', posts: $repository->all(loadContent: true))), + callback: static fn () => $viewRenderer->render(\Tempest\View\view('rss.view.php', posts: $repository->all(loadContent: true))), expiration: DateTime::now()->plusHours(1), ); diff --git a/src/Web/Blog/BlogRepository.php b/src/Web/Blog/BlogRepository.php index 21ddeeee..bb60ac42 100644 --- a/src/Web/Blog/BlogRepository.php +++ b/src/Web/Blog/BlogRepository.php @@ -11,7 +11,7 @@ use Spatie\YamlFrontMatter\YamlFrontMatter; use Tempest\Support\Arr\ImmutableArray; -use function Tempest\map; +use function Tempest\Mapper\map; use function Tempest\Support\arr; final readonly class BlogRepository diff --git a/src/Web/Code/CodeController.php b/src/Web/Code/CodeController.php index d6dd142d..90b7eee0 100644 --- a/src/Web/Code/CodeController.php +++ b/src/Web/Code/CodeController.php @@ -13,7 +13,7 @@ use Tempest\View\View; use function Tempest\Router\uri; -use function Tempest\view; +use function Tempest\View\view; final readonly class CodeController { @@ -27,7 +27,7 @@ public function paste(Request $request): View $code = urldecode(base64_decode($code, strict: true)); } - return view(__DIR__ . '/code.view.php', code: $code, language: $language); + return \Tempest\View\view(__DIR__ . '/code.view.php', code: $code, language: $language); } #[Post('/code/submit')] @@ -61,7 +61,7 @@ public function preview( $editUrl = uri([self::class, 'paste'], lang: $language, code: $code); $cleanUrl = uri([self::class, 'preview'], lang: $language, code: $code, center: $center, clean: true); - return view(__DIR__ . '/code_preview.view.php')->data( + return \Tempest\View\view(__DIR__ . '/code_preview.view.php')->data( code: $highlightedCode, editUrl: $editUrl, language: $language, diff --git a/src/Web/Code/EllisonController.php b/src/Web/Code/EllisonController.php index 04c8b23e..ef009e7c 100644 --- a/src/Web/Code/EllisonController.php +++ b/src/Web/Code/EllisonController.php @@ -14,14 +14,14 @@ use Tempest\View\View; use function Tempest\Router\uri; -use function Tempest\view; +use function Tempest\View\view; final readonly class EllisonController { #[Get('/ellison')] public function paste(): View { - return view(__DIR__ . '/ellison.view.php'); + return \Tempest\View\view(__DIR__ . '/ellison.view.php'); } #[Post('/ellison')] @@ -39,6 +39,6 @@ public function preview(Request $request): View $ellison = $highlighter->parse(base64_decode($request->getSessionValue('ellison') ?? base64_encode('Hello World'), strict: true), 'ellison'); - return view(__DIR__ . '/ellison_preview.view.php')->data(ellison: '
' . $ellison . '
'); + return \Tempest\View\view(__DIR__ . '/ellison_preview.view.php')->data(ellison: '
' . $ellison . '
'); } } diff --git a/src/Web/Community/CommunityController.php b/src/Web/Community/CommunityController.php index e0ca22e7..d4308bd1 100644 --- a/src/Web/Community/CommunityController.php +++ b/src/Web/Community/CommunityController.php @@ -8,7 +8,7 @@ use Tempest\Router\StaticPage; use Tempest\View\View; -use function Tempest\view; +use function Tempest\View\view; final class CommunityController { @@ -16,6 +16,6 @@ final class CommunityController #[Get('/community')] public function index(CommunityPostsRepository $repository): View { - return view('community.view.php', communityPosts: $repository->all()); + return \Tempest\View\view('community.view.php', communityPosts: $repository->all()); } } diff --git a/src/Web/Documentation/ChapterView.php b/src/Web/Documentation/ChapterView.php index f99f1c86..23169b4e 100644 --- a/src/Web/Documentation/ChapterView.php +++ b/src/Web/Documentation/ChapterView.php @@ -10,7 +10,7 @@ use Tempest\View\IsView; use Tempest\View\View; -use function Tempest\Support\Arr\map_iterable; +use function Tempest\Support\Arr\map; use function Tempest\Support\str; final class ChapterView implements View @@ -81,7 +81,7 @@ public function previousChapter(): ?Chapter public function categories(): array { - return map_iterable( + return map( array: glob(__DIR__ . "/content/{$this->version->getUrlSegment()}/*", flags: GLOB_ONLYDIR), map: static fn (string $path) => str($path)->afterLast('/')->replaceRegex('/^\d+-/', '')->toString(), ); diff --git a/src/Web/Documentation/PullDocumentationCommand.php b/src/Web/Documentation/PullDocumentationCommand.php index aa100614..2d23dde9 100644 --- a/src/Web/Documentation/PullDocumentationCommand.php +++ b/src/Web/Documentation/PullDocumentationCommand.php @@ -4,6 +4,12 @@ namespace App\Web\Documentation; +use function Tempest\Support\Filesystem\is_symbolic_link; +use function Tempest\Support\Filesystem\delete_file; +use function Tempest\Support\Filesystem\ensure_directory_empty; +use function Tempest\Support\Path\normalize; +use function Tempest\Support\Filesystem\move; +use function Tempest\Support\Filesystem\delete; use RuntimeException; use Symfony\Component\Process\Process; use Tempest\Console\Console; @@ -55,12 +61,12 @@ private function fetchVersionDocumentation(Version $version): void $versionedDocsDirectory = root_path('src/Web/Documentation/content/', $version->getUrlSegment()); $temporaryDirectory = root_path('docs-clone'); - if (Filesystem\is_symbolic_link($versionedDocsDirectory)) { - Filesystem\delete_file($versionedDocsDirectory); + if (is_symbolic_link($versionedDocsDirectory)) { + delete_file($versionedDocsDirectory); } - Filesystem\ensure_directory_empty($versionedDocsDirectory); - Filesystem\ensure_directory_empty($temporaryDirectory); + ensure_directory_empty($versionedDocsDirectory); + ensure_directory_empty($temporaryDirectory); $this->run( command: sprintf( @@ -73,16 +79,16 @@ private function fetchVersionDocumentation(Version $version): void $this->run( command: 'git sparse-checkout set --no-cone /' . self::DOCS_DIRECTORY, - cwd: Path\normalize($temporaryDirectory, self::CLONE_DIRECTORY), + cwd: normalize($temporaryDirectory, self::CLONE_DIRECTORY), ); $this->run( command: 'git checkout', - cwd: Path\normalize($temporaryDirectory, self::CLONE_DIRECTORY), + cwd: normalize($temporaryDirectory, self::CLONE_DIRECTORY), ); - Filesystem\move(Path\normalize($temporaryDirectory, self::CLONE_DIRECTORY, self::DOCS_DIRECTORY), $versionedDocsDirectory, overwrite: true); - Filesystem\delete($temporaryDirectory); + move(normalize($temporaryDirectory, self::CLONE_DIRECTORY, self::DOCS_DIRECTORY), $versionedDocsDirectory, overwrite: true); + delete($temporaryDirectory); } private function run(string $command, string $cwd): string diff --git a/src/Web/Documentation/SymlinkDocumentationCommand.php b/src/Web/Documentation/SymlinkDocumentationCommand.php index 07957ae1..ffb99c99 100644 --- a/src/Web/Documentation/SymlinkDocumentationCommand.php +++ b/src/Web/Documentation/SymlinkDocumentationCommand.php @@ -4,6 +4,11 @@ namespace App\Web\Documentation; +use function Tempest\Support\Filesystem\exists; +use function Tempest\Support\Filesystem\is_symbolic_link; +use function Tempest\Support\Filesystem\is_file; +use function Tempest\Support\Filesystem\delete_file; +use function Tempest\Support\Filesystem\create_directory_for_file; use RuntimeException; use Symfony\Component\Process\Process; use Tempest\Console\Console; @@ -28,20 +33,20 @@ public function __invoke(?Version $version = null, string $path = '../tempest-fr $this->console->header('Symlinking documentation'); - if (! Filesystem\exists($from)) { + if (! exists($from)) { $this->console->error("The source path does not exist (tried {$from})."); return ExitCode::ERROR; } - if (Filesystem\is_symbolic_link($to) || Filesystem\is_file($to)) { + if (is_symbolic_link($to) || is_file($to)) { $this->console->task( label: "Removing existing symlink at {$to}.", - handler: fn () => Filesystem\delete_file($to), + handler: fn () => delete_file($to), ); } - Filesystem\create_directory_for_file($to); + create_directory_for_file($to); $this->console->task( label: "Creating symlink from {$from} to {$to}.", diff --git a/src/Web/Homepage/HomeController.php b/src/Web/Homepage/HomeController.php index 158da27c..800da34f 100644 --- a/src/Web/Homepage/HomeController.php +++ b/src/Web/Homepage/HomeController.php @@ -12,7 +12,7 @@ use function Tempest\Support\Arr\map_with_keys; use function Tempest\Support\Str\strip_end; -use function Tempest\view; +use function Tempest\View\view; final readonly class HomeController { @@ -29,7 +29,7 @@ public function __invoke(): View fn (string $path) => yield strip_end(basename($path), '.md') => $this->markdown->convert(file_get_contents($path)), ); - return view('./home.view.php', codeBlocks: $codeBlocks); + return \Tempest\View\view('./home.view.php', codeBlocks: $codeBlocks); } #[Get('/view')] diff --git a/src/Web/Meta/MetaImageController.php b/src/Web/Meta/MetaImageController.php index d0f806e0..f6bb8a72 100644 --- a/src/Web/Meta/MetaImageController.php +++ b/src/Web/Meta/MetaImageController.php @@ -22,7 +22,7 @@ use function Tempest\Router\uri; use function Tempest\support\path; -use function Tempest\view; +use function Tempest\View\view; final readonly class MetaImageController { diff --git a/src/functions.php b/src/functions.php index 8c83f786..27e05ff7 100644 --- a/src/functions.php +++ b/src/functions.php @@ -7,9 +7,9 @@ use League\CommonMark\MarkdownConverter; use Tempest\View\View; -use function Tempest\get; -use function Tempest\map; -use function Tempest\view; +use function Tempest\Container\get; +use function Tempest\Mapper\map; +use function Tempest\View\view; function recursive_search(string $folder, string $pattern): Generator { @@ -38,5 +38,5 @@ function markdown(string $file): View $post = map($data)->to(MarkdownPost::class); - return view(__DIR__ . '/Web/markdown.view.php', post: $post); + return \Tempest\View\view(__DIR__ . '/Web/markdown.view.php', post: $post); }