Enforce return and parameter types

This commit is contained in:
Lance Pioch 2024-10-19 21:00:11 -04:00
parent 8740f0f645
commit c7a307af6e
61 changed files with 143 additions and 124 deletions

View File

@ -70,7 +70,7 @@ class EmailSettingsCommand extends Command
/** /**
* Handle variables for SMTP driver. * Handle variables for SMTP driver.
*/ */
private function setupSmtpDriverVariables() private function setupSmtpDriverVariables(): void
{ {
$this->variables['MAIL_HOST'] = $this->option('host') ?? $this->ask( $this->variables['MAIL_HOST'] = $this->option('host') ?? $this->ask(
trans('command/messages.environment.mail.ask_smtp_host'), trans('command/messages.environment.mail.ask_smtp_host'),
@ -101,7 +101,7 @@ class EmailSettingsCommand extends Command
/** /**
* Handle variables for mailgun driver. * Handle variables for mailgun driver.
*/ */
private function setupMailgunDriverVariables() private function setupMailgunDriverVariables(): void
{ {
$this->variables['MAILGUN_DOMAIN'] = $this->option('host') ?? $this->ask( $this->variables['MAILGUN_DOMAIN'] = $this->option('host') ?? $this->ask(
trans('command/messages.environment.mail.ask_mailgun_domain'), trans('command/messages.environment.mail.ask_mailgun_domain'),
@ -122,7 +122,7 @@ class EmailSettingsCommand extends Command
/** /**
* Handle variables for mandrill driver. * Handle variables for mandrill driver.
*/ */
private function setupMandrillDriverVariables() private function setupMandrillDriverVariables(): void
{ {
$this->variables['MANDRILL_SECRET'] = $this->option('password') ?? $this->ask( $this->variables['MANDRILL_SECRET'] = $this->option('password') ?? $this->ask(
trans('command/messages.environment.mail.ask_mandrill_secret'), trans('command/messages.environment.mail.ask_mandrill_secret'),
@ -133,7 +133,7 @@ class EmailSettingsCommand extends Command
/** /**
* Handle variables for postmark driver. * Handle variables for postmark driver.
*/ */
private function setupPostmarkDriverVariables() private function setupPostmarkDriverVariables(): void
{ {
$this->variables['MAIL_DRIVER'] = 'smtp'; $this->variables['MAIL_DRIVER'] = 'smtp';
$this->variables['MAIL_HOST'] = 'smtp.postmarkapp.com'; $this->variables['MAIL_HOST'] = 'smtp.postmarkapp.com';

View File

@ -51,7 +51,7 @@ class ProcessRunnableCommand extends Command
* never throw an exception out, otherwise you'll end up killing the entire run group causing * never throw an exception out, otherwise you'll end up killing the entire run group causing
* any other schedules to not process correctly. * any other schedules to not process correctly.
*/ */
protected function processSchedule(Schedule $schedule) protected function processSchedule(Schedule $schedule): void
{ {
if ($schedule->tasks->isEmpty()) { if ($schedule->tasks->isEmpty()) {
return; return;

View File

@ -178,7 +178,7 @@ class UpgradeCommand extends Command
$this->info(__('commands.upgrade.success')); $this->info(__('commands.upgrade.success'));
} }
protected function withProgress(ProgressBar $bar, \Closure $callback) protected function withProgress(ProgressBar $bar, \Closure $callback): void
{ {
$bar->clear(); $bar->clear();
$callback(); $callback();

View File

@ -4,6 +4,8 @@ namespace App\Exceptions;
use Exception; use Exception;
use Filament\Notifications\Notification; use Filament\Notifications\Notification;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Illuminate\Http\Response; use Illuminate\Http\Response;
@ -46,7 +48,7 @@ class DisplayException extends PanelException implements HttpExceptionInterface
* and then redirecting them back to the page that they came from. If the * and then redirecting them back to the page that they came from. If the
* request originated from an API hit, return the error in JSONAPI spec format. * request originated from an API hit, return the error in JSONAPI spec format.
*/ */
public function render(Request $request) public function render(Request $request): bool|RedirectResponse|JsonResponse
{ {
if ($request->is('livewire/update')) { if ($request->is('livewire/update')) {
Notification::make() Notification::make()
@ -55,7 +57,7 @@ class DisplayException extends PanelException implements HttpExceptionInterface
->danger() ->danger()
->send(); ->send();
return; return false;
} }
if ($request->expectsJson()) { if ($request->expectsJson()) {
@ -73,10 +75,10 @@ class DisplayException extends PanelException implements HttpExceptionInterface
* *
* @throws \Throwable * @throws \Throwable
*/ */
public function report() public function report(): void
{ {
if (!$this->getPrevious() instanceof \Exception || !Handler::isReportable($this->getPrevious())) { if (!$this->getPrevious() instanceof \Exception || !Handler::isReportable($this->getPrevious())) {
return null; return;
} }
try { try {
@ -85,6 +87,6 @@ class DisplayException extends PanelException implements HttpExceptionInterface
throw $this->getPrevious(); throw $this->getPrevious();
} }
return $logger->{$this->getErrorLevel()}($this->getPrevious()); $logger->{$this->getErrorLevel()}($this->getPrevious());
} }
} }

View File

@ -4,17 +4,17 @@ namespace App\Extensions\Themes;
class Theme class Theme
{ {
public function js($path): string public function js(string $path): string
{ {
return sprintf('<script src="%s"></script>' . PHP_EOL, $this->getUrl($path)); return sprintf('<script src="%s"></script>' . PHP_EOL, $this->getUrl($path));
} }
public function css($path): string public function css(string $path): string
{ {
return sprintf('<link media="all" type="text/css" rel="stylesheet" href="%s"/>' . PHP_EOL, $this->getUrl($path)); return sprintf('<link media="all" type="text/css" rel="stylesheet" href="%s"/>' . PHP_EOL, $this->getUrl($path));
} }
protected function getUrl($path): string protected function getUrl(string $path): string
{ {
return '/themes/panel/' . ltrim($path, '/'); return '/themes/panel/' . ltrim($path, '/');
} }

View File

@ -24,6 +24,7 @@ use Filament\Notifications\Notification;
use Filament\Pages\SimplePage; use Filament\Pages\SimplePage;
use Filament\Support\Enums\MaxWidth; use Filament\Support\Enums\MaxWidth;
use Filament\Support\Exceptions\Halt; use Filament\Support\Exceptions\Halt;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Blade;
use Illuminate\Support\HtmlString; use Illuminate\Support\HtmlString;
@ -37,7 +38,7 @@ class PanelInstaller extends SimplePage implements HasForms
use EnvironmentWriterTrait; use EnvironmentWriterTrait;
use InteractsWithForms; use InteractsWithForms;
public $data = []; public array $data = [];
protected static string $view = 'filament.pages.installer'; protected static string $view = 'filament.pages.installer';
@ -54,7 +55,7 @@ class PanelInstaller extends SimplePage implements HasForms
return env('APP_INSTALLED', true); return env('APP_INSTALLED', true);
} }
public function mount() public function mount(): void
{ {
abort_if(self::isInstalled(), 404); abort_if(self::isInstalled(), 404);
@ -93,7 +94,7 @@ class PanelInstaller extends SimplePage implements HasForms
return 'data'; return 'data';
} }
public function submit() public function submit(): RedirectResponse
{ {
// Disable installer // Disable installer
$this->writeToEnvironment(['APP_INSTALLED' => 'true']); $this->writeToEnvironment(['APP_INSTALLED' => 'true']);

View File

@ -72,7 +72,7 @@ class DatabaseStep
}); });
} }
private static function testConnection(string $driver, $host, $port, $database, $username, $password): bool private static function testConnection(string $driver, string $host, string $port, string $database, string $username, string $password): bool
{ {
if ($driver === 'sqlite') { if ($driver === 'sqlite') {
return true; return true;

View File

@ -56,7 +56,7 @@ class RedisStep
}); });
} }
private static function testConnection($host, $port, $username, $password): bool private static function testConnection(string $host, string $port, string $username, string $password): bool
{ {
try { try {
config()->set('database.redis._panel_install_test', [ config()->set('database.redis._panel_install_test', [

View File

@ -5,6 +5,7 @@ namespace App\Filament\Resources;
use App\Filament\Resources\ApiKeyResource\Pages; use App\Filament\Resources\ApiKeyResource\Pages;
use App\Models\ApiKey; use App\Models\ApiKey;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Illuminate\Database\Eloquent\Model;
class ApiKeyResource extends Resource class ApiKeyResource extends Resource
{ {
@ -18,7 +19,7 @@ class ApiKeyResource extends Resource
return static::getModel()::where('key_type', '2')->count() ?: null; return static::getModel()::where('key_type', '2')->count() ?: null;
} }
public static function canEdit($record): bool public static function canEdit(Model $record): bool
{ {
return false; return false;
} }

View File

@ -4,6 +4,8 @@ namespace App\Filament\Resources\DatabaseHostResource\Pages;
use App\Filament\Resources\DatabaseHostResource; use App\Filament\Resources\DatabaseHostResource;
use App\Services\Databases\Hosts\HostCreationService; use App\Services\Databases\Hosts\HostCreationService;
use Closure;
use Exception;
use Filament\Forms; use Filament\Forms;
use Filament\Forms\Components\Section; use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
@ -97,7 +99,7 @@ class CreateDatabaseHost extends CreateRecord
return resolve(HostCreationService::class)->handle($data); return resolve(HostCreationService::class)->handle($data);
} }
public function exception($e, $stopPropagation): void public function exception(Exception $e, Closure $stopPropagation): void
{ {
if ($e instanceof PDOException) { if ($e instanceof PDOException) {
Notification::make() Notification::make()

View File

@ -6,6 +6,8 @@ use App\Filament\Resources\DatabaseHostResource;
use App\Filament\Resources\DatabaseHostResource\RelationManagers\DatabasesRelationManager; use App\Filament\Resources\DatabaseHostResource\RelationManagers\DatabasesRelationManager;
use App\Models\DatabaseHost; use App\Models\DatabaseHost;
use App\Services\Databases\Hosts\HostUpdateService; use App\Services\Databases\Hosts\HostUpdateService;
use Closure;
use Exception;
use Filament\Actions; use Filament\Actions;
use Filament\Forms; use Filament\Forms;
use Filament\Forms\Components\Section; use Filament\Forms\Components\Section;
@ -97,12 +99,16 @@ class EditDatabaseHost extends EditRecord
]; ];
} }
protected function handleRecordUpdate($record, array $data): Model protected function handleRecordUpdate(Model $record, array $data): Model
{ {
return resolve(HostUpdateService::class)->handle($record->id, $data); if (! $record instanceof DatabaseHost) {
return $record;
} }
public function exception($e, $stopPropagation): void return resolve(HostUpdateService::class)->handle($record, $data);
}
public function exception(Exception $e, Closure $stopPropagation): void
{ {
if ($e instanceof PDOException) { if ($e instanceof PDOException) {
Notification::make() Notification::make()

View File

@ -8,6 +8,7 @@ use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Forms\Get; use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Resources\RelationManagers\RelationManager; use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Actions\DeleteAction; use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\ViewAction; use Filament\Tables\Actions\ViewAction;
@ -60,7 +61,7 @@ class DatabasesRelationManager extends RelationManager
]); ]);
} }
protected function rotatePassword(DatabasePasswordService $service, Database $database, $set, $get): void protected function rotatePassword(DatabasePasswordService $service, Database $database, Set $set, Get $get): void
{ {
$newPassword = $service->handle($database); $newPassword = $service->handle($database);
$jdbcString = 'jdbc:mysql://' . $get('username') . ':' . urlencode($newPassword) . '@' . $database->host->host . ':' . $database->host->port . '/' . $get('database'); $jdbcString = 'jdbc:mysql://' . $get('username') . ':' . urlencode($newPassword) . '@' . $database->host->host . ':' . $database->host->port . '/' . $get('database');

View File

@ -469,12 +469,12 @@ class EditNode extends EditRecord
$this->fillForm(); $this->fillForm();
} }
protected function getColumnSpan() protected function getColumnSpan(): ?int
{ {
return null; return null;
} }
protected function getColumnStart() protected function getColumnStart(): ?int
{ {
return null; return null;
} }

View File

@ -813,7 +813,7 @@ class EditServer extends EditRecord
->all(); ->all();
} }
protected function rotatePassword(DatabasePasswordService $service, $record, $set, $get): void protected function rotatePassword(DatabasePasswordService $service, Database $record, Set $set, Get $get): void
{ {
$newPassword = $service->handle($record); $newPassword = $service->handle($record);
$jdbcString = 'jdbc:mysql://' . $get('username') . ':' . urlencode($newPassword) . '@' . $record->host->host . ':' . $record->host->port . '/' . $get('database'); $jdbcString = 'jdbc:mysql://' . $get('username') . ':' . urlencode($newPassword) . '@' . $record->host->host . ':' . $record->host->port . '/' . $get('database');

View File

@ -13,7 +13,9 @@ use chillerlan\QRCode\Common\EccLevel;
use chillerlan\QRCode\Common\Version; use chillerlan\QRCode\Common\Version;
use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QRCode;
use chillerlan\QRCode\QROptions; use chillerlan\QRCode\QROptions;
use Closure;
use DateTimeZone; use DateTimeZone;
use Exception;
use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Grid; use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Placeholder;
@ -274,8 +276,12 @@ class EditProfile extends \Filament\Pages\Auth\EditProfile
]; ];
} }
protected function handleRecordUpdate($record, $data): Model protected function handleRecordUpdate(Model $record, array $data): Model
{ {
if (! $record instanceof User) {
return $record;
}
if ($token = $data['2facode'] ?? null) { if ($token = $data['2facode'] ?? null) {
/** @var ToggleTwoFactorService $service */ /** @var ToggleTwoFactorService $service */
$service = resolve(ToggleTwoFactorService::class); $service = resolve(ToggleTwoFactorService::class);
@ -298,7 +304,7 @@ class EditProfile extends \Filament\Pages\Auth\EditProfile
return parent::handleRecordUpdate($record, $data); return parent::handleRecordUpdate($record, $data);
} }
public function exception($e, $stopPropagation): void public function exception(Exception $e, Closure $stopPropagation): void
{ {
if ($e instanceof TwoFactorAuthenticationTokenInvalid) { if ($e instanceof TwoFactorAuthenticationTokenInvalid) {
Notification::make() Notification::make()

View File

@ -70,7 +70,7 @@ class ServersController extends Controller
* @throws \App\Exceptions\DisplayException * @throws \App\Exceptions\DisplayException
* @throws \App\Exceptions\Model\DataValidationException * @throws \App\Exceptions\Model\DataValidationException
*/ */
public function toggleInstall(Server $server) public function toggleInstall(Server $server): void
{ {
if ($server->status === ServerState::InstallFailed) { if ($server->status === ServerState::InstallFailed) {
throw new DisplayException(trans('admin/server.exceptions.marked_as_failed')); throw new DisplayException(trans('admin/server.exceptions.marked_as_failed'));
@ -84,8 +84,6 @@ class ServersController extends Controller
->body(trans('admin/server.alerts.install_toggled')) ->body(trans('admin/server.alerts.install_toggled'))
->success() ->success()
->send(); ->send();
return null;
} }
/** /**
@ -94,7 +92,7 @@ class ServersController extends Controller
* @throws \App\Exceptions\DisplayException * @throws \App\Exceptions\DisplayException
* @throws \App\Exceptions\Model\DataValidationException * @throws \App\Exceptions\Model\DataValidationException
*/ */
public function reinstallServer(Server $server) public function reinstallServer(Server $server): void
{ {
$this->reinstallService->handle($server); $this->reinstallService->handle($server);

View File

@ -40,7 +40,7 @@ abstract class ApplicationApiController extends Controller
* Perform dependency injection of certain classes needed for core functionality * Perform dependency injection of certain classes needed for core functionality
* without littering the constructors of classes that extend this abstract. * without littering the constructors of classes that extend this abstract.
*/ */
public function loadDependencies(Fractal $fractal, Request $request) public function loadDependencies(Fractal $fractal, Request $request): void
{ {
$this->fractal = $fractal; $this->fractal = $fractal;
$this->request = $request; $this->request = $request;

View File

@ -14,7 +14,7 @@ use App\Http\Requests\Api\Remote\ActivityEventRequest;
class ActivityProcessingController extends Controller class ActivityProcessingController extends Controller
{ {
public function __invoke(ActivityEventRequest $request) public function __invoke(ActivityEventRequest $request): void
{ {
$tz = Carbon::now()->getTimezone(); $tz = Carbon::now()->getTimezone();

View File

@ -51,7 +51,7 @@ abstract class AbstractLoginController extends Controller
* *
* @throws \App\Exceptions\DisplayException * @throws \App\Exceptions\DisplayException
*/ */
protected function sendFailedLoginResponse(Request $request, Authenticatable $user = null, string $message = null) protected function sendFailedLoginResponse(Request $request, Authenticatable $user = null, string $message = null): never
{ {
$this->incrementLoginAttempts($request); $this->incrementLoginAttempts($request);
$this->fireFailedLoginEvent($user, [ $this->fireFailedLoginEvent($user, [
@ -99,7 +99,7 @@ abstract class AbstractLoginController extends Controller
/** /**
* Fire a failed login event. * Fire a failed login event.
*/ */
protected function fireFailedLoginEvent(Authenticatable $user = null, array $credentials = []) protected function fireFailedLoginEvent(Authenticatable $user = null, array $credentials = []): void
{ {
Event::dispatch(new Failed('auth', $user, $credentials)); Event::dispatch(new Failed('auth', $user, $credentials));
} }

View File

@ -16,7 +16,7 @@ class ForgotPasswordController extends Controller
/** /**
* Get the response for a failed password reset link. * Get the response for a failed password reset link.
*/ */
protected function sendResetLinkFailedResponse(Request $request, $response): JsonResponse protected function sendResetLinkFailedResponse(Request $request, string $response): JsonResponse
{ {
// As noted in #358 we will return success even if it failed // As noted in #358 we will return success even if it failed
// to avoid pointing out that an account does or does not // to avoid pointing out that an account does or does not
@ -31,7 +31,7 @@ class ForgotPasswordController extends Controller
* *
* @param string $response * @param string $response
*/ */
protected function sendResetLinkResponse(Request $request, $response): JsonResponse protected function sendResetLinkResponse(Request $request, string $response): JsonResponse
{ {
return response()->json([ return response()->json([
'status' => trans($response), 'status' => trans($response),

View File

@ -72,7 +72,7 @@ class LoginCheckpointController extends AbstractLoginController
} }
} }
return $this->sendFailedLoginResponse($request, $user, !empty($recoveryToken) ? 'The recovery token provided is not valid.' : null); $this->sendFailedLoginResponse($request, $user, !empty($recoveryToken) ? 'The recovery token provided is not valid.' : null);
} }
/** /**

View File

@ -4,11 +4,13 @@ namespace App\Http\Controllers\Auth;
use App\Filament\Pages\Installer\PanelInstaller; use App\Filament\Pages\Installer\PanelInstaller;
use Carbon\CarbonImmutable; use Carbon\CarbonImmutable;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\User; use App\Models\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use App\Facades\Activity; use App\Facades\Activity;
use Illuminate\View\View;
class LoginController extends AbstractLoginController class LoginController extends AbstractLoginController
{ {
@ -17,7 +19,7 @@ class LoginController extends AbstractLoginController
* base authentication view component. React will take over at this point and * base authentication view component. React will take over at this point and
* turn the login area into an SPA. * turn the login area into an SPA.
*/ */
public function index() public function index(): View|RedirectResponse
{ {
if (!PanelInstaller::isInstalled()) { if (!PanelInstaller::isInstalled()) {
return redirect('/installer'); return redirect('/installer');

View File

@ -69,7 +69,7 @@ class ResetPasswordController extends Controller
* *
* @throws \App\Exceptions\Model\DataValidationException * @throws \App\Exceptions\Model\DataValidationException
*/ */
protected function resetPassword($user, $password) protected function resetPassword($user, $password): void
{ {
/** @var User $user */ /** @var User $user */
$user->password = $this->hasher->make($password); $user->password = $this->hasher->make($password);

View File

@ -15,7 +15,7 @@ class EnsureStatefulRequests extends EnsureFrontendRequestsAreStateful
* We don't want to support API usage using the cookies, except for requests stemming * We don't want to support API usage using the cookies, except for requests stemming
* from the front-end we control. * from the front-end we control.
*/ */
public static function fromFrontend($request) public static function fromFrontend($request): bool
{ {
if (parent::fromFrontend($request)) { if (parent::fromFrontend($request)) {
return true; return true;

View File

@ -3,6 +3,7 @@
namespace App\Http\Requests\Admin\Egg; namespace App\Http\Requests\Admin\Egg;
use App\Http\Requests\Admin\AdminFormRequest; use App\Http\Requests\Admin\AdminFormRequest;
use Illuminate\Validation\Validator;
class EggFormRequest extends AdminFormRequest class EggFormRequest extends AdminFormRequest
{ {
@ -25,7 +26,7 @@ class EggFormRequest extends AdminFormRequest
return $rules; return $rules;
} }
public function withValidator($validator) public function withValidator(Validator $validator): void
{ {
$validator->sometimes('config_from', 'exists:eggs,id', function () { $validator->sometimes('config_from', 'exists:eggs,id', function () {
return (int) $this->input('config_from') !== 0; return (int) $this->input('config_from') !== 0;

View File

@ -11,6 +11,6 @@ class UpdateDatabaseHostRequest extends StoreDatabaseHostRequest
/** @var DatabaseHost $databaseHost */ /** @var DatabaseHost $databaseHost */
$databaseHost = $this->route()->parameter('database_host'); $databaseHost = $this->route()->parameter('database_host');
return $rules ?? DatabaseHost::getRulesForUpdate($databaseHost->id); return $rules ?? DatabaseHost::getRulesForUpdate($databaseHost);
} }
} }

View File

@ -14,6 +14,6 @@ class UpdateMountRequest extends StoreMountRequest
/** @var Mount $mount */ /** @var Mount $mount */
$mount = $this->route()->parameter('mount'); $mount = $this->route()->parameter('mount');
return Mount::getRulesForUpdate($mount->id); return Mount::getRulesForUpdate($mount);
} }
} }

View File

@ -15,6 +15,6 @@ class UpdateNodeRequest extends StoreNodeRequest
/** @var Node $node */ /** @var Node $node */
$node = $this->route()->parameter('node'); $node = $this->route()->parameter('node');
return parent::rules(Node::getRulesForUpdate($node->id)); return parent::rules(Node::getRulesForUpdate($node));
} }
} }

View File

@ -11,8 +11,8 @@ class UpdateUserRequest extends StoreUserRequest
*/ */
public function rules(array $rules = null): array public function rules(array $rules = null): array
{ {
$userId = $this->parameter('user', User::class)->id; $user = $this->parameter('user', User::class);
return parent::rules(User::getRulesForUpdate($userId)); return parent::rules(User::getRulesForUpdate($user));
} }
} }

View File

@ -49,7 +49,7 @@ abstract class SubuserRequest extends ClientApiRequest
* *
* @throws \Illuminate\Contracts\Container\BindingResolutionException * @throws \Illuminate\Contracts\Container\BindingResolutionException
*/ */
protected function validatePermissionsCanBeAssigned(array $permissions) protected function validatePermissionsCanBeAssigned(array $permissions): void
{ {
$user = $this->user(); $user = $this->user();
/** @var \App\Models\Server $server */ /** @var \App\Models\Server $server */

View File

@ -90,7 +90,7 @@ class RunTaskJob extends Job implements ShouldQueue
/** /**
* Handle a failure while sending the action to the daemon or otherwise processing the job. * Handle a failure while sending the action to the daemon or otherwise processing the job.
*/ */
public function failed(\Exception $exception = null) public function failed(\Exception $exception = null): void
{ {
$this->markTaskNotQueued(); $this->markTaskNotQueued();
$this->markScheduleComplete(); $this->markScheduleComplete();
@ -99,7 +99,7 @@ class RunTaskJob extends Job implements ShouldQueue
/** /**
* Get the next task in the schedule and queue it for running after the defined period of wait time. * Get the next task in the schedule and queue it for running after the defined period of wait time.
*/ */
private function queueNextTask() private function queueNextTask(): void
{ {
/** @var \App\Models\Task|null $nextTask */ /** @var \App\Models\Task|null $nextTask */
$nextTask = Task::query()->where('schedule_id', $this->task->schedule_id) $nextTask = Task::query()->where('schedule_id', $this->task->schedule_id)
@ -121,7 +121,7 @@ class RunTaskJob extends Job implements ShouldQueue
/** /**
* Marks the parent schedule as being complete. * Marks the parent schedule as being complete.
*/ */
private function markScheduleComplete() private function markScheduleComplete(): void
{ {
$this->task->schedule()->update([ $this->task->schedule()->update([
'is_processing' => false, 'is_processing' => false,
@ -132,7 +132,7 @@ class RunTaskJob extends Job implements ShouldQueue
/** /**
* Mark a specific task as no longer being queued. * Mark a specific task as no longer being queued.
*/ */
private function markTaskNotQueued() private function markTaskNotQueued(): void
{ {
$this->task->update(['is_queued' => false]); $this->task->update(['is_queued' => false]);
} }

View File

@ -3,6 +3,7 @@
namespace App\Livewire; namespace App\Livewire;
use App\Models\Node; use App\Models\Node;
use Illuminate\View\View;
use Livewire\Component; use Livewire\Component;
class NodeSystemInformation extends Component class NodeSystemInformation extends Component
@ -10,12 +11,12 @@ class NodeSystemInformation extends Component
public Node $node; public Node $node;
public string $sizeClasses; public string $sizeClasses;
public function render() public function render(): View
{ {
return view('livewire.node-system-information'); return view('livewire.node-system-information');
} }
public function placeholder() public function placeholder(): string
{ {
return <<<'HTML' return <<<'HTML'
<div> <div>

View File

@ -123,7 +123,7 @@ class ActivityLog extends Model
* *
* @see https://laravel.com/docs/9.x/eloquent#pruning-models * @see https://laravel.com/docs/9.x/eloquent#pruning-models
*/ */
public function prunable() public function prunable(): Builder
{ {
if (is_null(config('activity.prune_days'))) { if (is_null(config('activity.prune_days'))) {
throw new \LogicException('Cannot prune activity logs: no "prune_days" configuration value is set.'); throw new \LogicException('Cannot prune activity logs: no "prune_days" configuration value is set.');
@ -136,7 +136,7 @@ class ActivityLog extends Model
* Boots the model event listeners. This will trigger an activity log event every * Boots the model event listeners. This will trigger an activity log event every
* time a new model is inserted which can then be captured and worked with as needed. * time a new model is inserted which can then be captured and worked with as needed.
*/ */
protected static function boot() protected static function boot(): void
{ {
parent::boot(); parent::boot();
@ -149,7 +149,7 @@ class ActivityLog extends Model
}); });
} }
public function htmlable() public function htmlable(): string
{ {
$user = $this->actor; $user = $this->actor;
if (!$user instanceof User) { if (!$user instanceof User) {

View File

@ -3,8 +3,10 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\SoftDeletingScope;
/** /**
* \App\Models\ActivityLogSubject. * \App\Models\ActivityLogSubject.
@ -36,15 +38,8 @@ class ActivityLogSubject extends Pivot
return $this->belongsTo(ActivityLog::class); return $this->belongsTo(ActivityLog::class);
} }
public function subject() public function subject(): MorphTo
{ {
$morph = $this->morphTo(); return $this->morphTo()->withoutGlobalScope(SoftDeletingScope::class);
if (in_array(SoftDeletes::class, class_uses_recursive($morph::class))) {
/** @var self|Backup|UserSSHKey $morph - cannot use traits in doc blocks */
return $morph->withTrashed();
}
return $morph;
} }
} }

View File

@ -13,7 +13,7 @@ class AdminServerFilter implements Filter
* *
* @param string $value * @param string $value
*/ */
public function __invoke(Builder $query, $value, string $property) public function __invoke(Builder $query, $value, string $property): void
{ {
if ($query->getQuery()->from !== 'servers') { if ($query->getQuery()->from !== 'servers') {
throw new \BadMethodCallException('Cannot use the AdminServerFilter against a non-server model.'); throw new \BadMethodCallException('Cannot use the AdminServerFilter against a non-server model.');

View File

@ -21,7 +21,7 @@ class MultiFieldServerFilter implements Filter
* *
* @param string $value * @param string $value
*/ */
public function __invoke(Builder $query, $value, string $property) public function __invoke(Builder $query, $value, string $property): void
{ {
if ($query->getQuery()->from !== 'servers') { if ($query->getQuery()->from !== 'servers') {
throw new \BadMethodCallException('Cannot use the MultiFieldServerFilter against a non-server model.'); throw new \BadMethodCallException('Cannot use the MultiFieldServerFilter against a non-server model.');

View File

@ -38,7 +38,7 @@ abstract class Model extends IlluminateModel
* *
* @throws \Illuminate\Contracts\Container\BindingResolutionException * @throws \Illuminate\Contracts\Container\BindingResolutionException
*/ */
protected static function boot() protected static function boot(): void
{ {
parent::boot(); parent::boot();
@ -69,7 +69,7 @@ abstract class Model extends IlluminateModel
return 'uuid'; return 'uuid';
} }
protected function asDateTime($value) protected function asDateTime($value): Carbon
{ {
$timezone = auth()->user()?->timezone ?? config('app.timezone', 'UTC'); $timezone = auth()->user()?->timezone ?? config('app.timezone', 'UTC');
@ -135,11 +135,9 @@ abstract class Model extends IlluminateModel
* Returns the rules associated with the model, specifically for updating the given model * Returns the rules associated with the model, specifically for updating the given model
* rather than just creating it. * rather than just creating it.
*/ */
public static function getRulesForUpdate($model, string $column = 'id'): array public static function getRulesForUpdate(self $model): array
{ {
if ($model instanceof Model) {
[$id, $column] = [$model->getKey(), $model->getKeyName()]; [$id, $column] = [$model->getKey(), $model->getKeyName()];
}
$rules = static::getRules(); $rules = static::getRules();
foreach ($rules as $key => &$data) { foreach ($rules as $key => &$data) {

View File

@ -70,7 +70,7 @@ class Mount extends Model
/** /**
* Blacklisted source paths. * Blacklisted source paths.
*/ */
public static $invalidSourcePaths = [ public static array $invalidSourcePaths = [
'/etc/pelican', '/etc/pelican',
'/var/lib/pelican/volumes', '/var/lib/pelican/volumes',
'/srv/daemon-data', '/srv/daemon-data',
@ -79,7 +79,7 @@ class Mount extends Model
/** /**
* Blacklisted target paths. * Blacklisted target paths.
*/ */
public static $invalidTargetPaths = [ public static array $invalidTargetPaths = [
'/home/container', '/home/container',
]; ];

View File

@ -8,6 +8,7 @@ use Exception;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Symfony\Component\Yaml\Yaml; use Symfony\Component\Yaml\Yaml;
@ -268,7 +269,7 @@ class Node extends Model
return true; return true;
} }
public static function getForServerCreation() public static function getForServerCreation(): Collection
{ {
return self::with('allocations')->get()->map(function (Node $item) { return self::with('allocations')->get()->map(function (Node $item) {
$filtered = $item->getRelation('allocations')->where('server_id', null)->map(function ($map) { $filtered = $item->getRelation('allocations')->where('server_id', null)->map(function ($map) {
@ -330,7 +331,7 @@ class Node extends Model
return $statuses; return $statuses;
} }
public function statistics() public function statistics(): array
{ {
$default = [ $default = [
'memory_total' => 0, 'memory_total' => 0,

View File

@ -363,7 +363,7 @@ class Server extends Model
* *
* @throws ServerStateConflictException * @throws ServerStateConflictException
*/ */
public function validateCurrentState() public function validateCurrentState(): void
{ {
if ( if (
$this->isSuspended() || $this->isSuspended() ||
@ -382,7 +382,7 @@ class Server extends Model
* sure the server can be transferred and is not currently being transferred * sure the server can be transferred and is not currently being transferred
* or installed. * or installed.
*/ */
public function validateTransferState() public function validateTransferState(): void
{ {
if ( if (
!$this->isInstalled() || !$this->isInstalled() ||

View File

@ -235,7 +235,7 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac
* *
* @param string $token * @param string $token
*/ */
public function sendPasswordResetNotification($token) public function sendPasswordResetNotification($token): void
{ {
Activity::event('auth:reset-password') Activity::event('auth:reset-password')
->withRequestMetadata() ->withRequestMetadata()
@ -248,7 +248,7 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac
/** /**
* Store the username as a lowercase string. * Store the username as a lowercase string.
*/ */
public function setUsernameAttribute(string $value) public function setUsernameAttribute(string $value): void
{ {
$this->attributes['username'] = mb_strtolower($value); $this->attributes['username'] = mb_strtolower($value);
} }

View File

@ -41,7 +41,7 @@ class ServerPolicy
* not call the before() function if there isn't a function matching the * not call the before() function if there isn't a function matching the
* policy permission. * policy permission.
*/ */
public function __call(string $name, mixed $arguments) public function __call(string $name, mixed $arguments): void
{ {
// do nothing // do nothing
} }

View File

@ -22,7 +22,7 @@ use Illuminate\View\Middleware\ShareErrorsFromSession;
class AdminPanelProvider extends PanelProvider class AdminPanelProvider extends PanelProvider
{ {
public function boot() public function boot(): void
{ {
FilamentAsset::registerCssVariables([ FilamentAsset::registerCssVariables([
'sidebar-width' => '16rem !important', 'sidebar-width' => '16rem !important',

View File

@ -2,6 +2,7 @@
namespace App\Repositories\Daemon; namespace App\Repositories\Daemon;
use Illuminate\Http\Client\Response;
use Webmozart\Assert\Assert; use Webmozart\Assert\Assert;
use App\Models\Backup; use App\Models\Backup;
use App\Models\Server; use App\Models\Server;
@ -27,7 +28,7 @@ class DaemonBackupRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function backup(Backup $backup) public function backup(Backup $backup): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -50,7 +51,7 @@ class DaemonBackupRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function restore(Backup $backup, string $url = null, bool $truncate = false) public function restore(Backup $backup, string $url = null, bool $truncate = false): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -73,7 +74,7 @@ class DaemonBackupRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function delete(Backup $backup) public function delete(Backup $backup): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);

View File

@ -5,6 +5,7 @@ namespace App\Repositories\Daemon;
use App\Models\Node; use App\Models\Node;
use GuzzleHttp\Exception\TransferException; use GuzzleHttp\Exception\TransferException;
use App\Exceptions\Http\Connection\DaemonConnectionException; use App\Exceptions\Http\Connection\DaemonConnectionException;
use Illuminate\Http\Client\Response;
class DaemonConfigurationRepository extends DaemonRepository class DaemonConfigurationRepository extends DaemonRepository
{ {
@ -13,7 +14,7 @@ class DaemonConfigurationRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function getSystemInformation(?int $version = null, $connectTimeout = 5): array public function getSystemInformation(?int $version = null, int $connectTimeout = 5): array
{ {
try { try {
$response = $this $response = $this
@ -34,7 +35,7 @@ class DaemonConfigurationRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function update(Node $node) public function update(Node $node): Response
{ {
try { try {
return $this->getHttpClient()->post( return $this->getHttpClient()->post(

View File

@ -3,6 +3,7 @@
namespace App\Repositories\Daemon; namespace App\Repositories\Daemon;
use Carbon\CarbonInterval; use Carbon\CarbonInterval;
use Illuminate\Http\Client\Response;
use Webmozart\Assert\Assert; use Webmozart\Assert\Assert;
use App\Models\Server; use App\Models\Server;
use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Exception\ClientException;
@ -48,7 +49,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function putContent(string $path, string $content) public function putContent(string $path, string $content): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -88,7 +89,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function createDirectory(string $name, string $path) public function createDirectory(string $name, string $path): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -110,7 +111,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function renameFiles(?string $root, array $files) public function renameFiles(?string $root, array $files): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -132,7 +133,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function copyFile(string $location) public function copyFile(string $location): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -153,7 +154,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function deleteFiles(?string $root, array $files) public function deleteFiles(?string $root, array $files): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -203,7 +204,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function decompressFile(?string $root, string $file) public function decompressFile(?string $root, string $file): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -229,7 +230,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function chmodFiles(?string $root, array $files) public function chmodFiles(?string $root, array $files): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);
@ -251,7 +252,7 @@ class DaemonFileRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function pull(string $url, ?string $directory, array $params = []) public function pull(string $url, ?string $directory, array $params = []): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);

View File

@ -2,6 +2,7 @@
namespace App\Repositories\Daemon; namespace App\Repositories\Daemon;
use Illuminate\Http\Client\Response;
use Webmozart\Assert\Assert; use Webmozart\Assert\Assert;
use App\Models\Server; use App\Models\Server;
use GuzzleHttp\Exception\TransferException; use GuzzleHttp\Exception\TransferException;
@ -14,7 +15,7 @@ class DaemonPowerRepository extends DaemonRepository
* *
* @throws \App\Exceptions\Http\Connection\DaemonConnectionException * @throws \App\Exceptions\Http\Connection\DaemonConnectionException
*/ */
public function send(string $action) public function send(string $action): Response
{ {
Assert::isInstanceOf($this->server, Server::class); Assert::isInstanceOf($this->server, Server::class);

View File

@ -168,7 +168,7 @@ class ActivityLogService
* *
* @throws \Throwable * @throws \Throwable
*/ */
public function transaction(\Closure $callback) public function transaction(\Closure $callback): mixed
{ {
return $this->connection->transaction(function () use ($callback) { return $this->connection->transaction(function () use ($callback) {
$response = $callback($this); $response = $callback($this);

View File

@ -17,7 +17,7 @@ class FindViableNodesService
* are tossed out, as are any nodes marked as non-public, meaning automatic * are tossed out, as are any nodes marked as non-public, meaning automatic
* deployments should not be done against them. * deployments should not be done against them.
*/ */
public function handle(int $memory = 0, int $disk = 0, int $cpu = 0, $tags = []): Collection public function handle(int $memory = 0, int $disk = 0, int $cpu = 0, array $tags = []): Collection
{ {
$nodes = Node::query() $nodes = Node::query()
->withSum('servers', 'memory') ->withSum('servers', 'memory')

View File

@ -27,7 +27,7 @@ class SuspensionService
* *
* @throws \Throwable * @throws \Throwable
*/ */
public function toggle(Server $server, string $action = self::ACTION_SUSPEND) public function toggle(Server $server, string $action = self::ACTION_SUSPEND): void
{ {
Assert::oneOf($action, [self::ACTION_SUSPEND, self::ACTION_UNSUSPEND]); Assert::oneOf($action, [self::ACTION_SUSPEND, self::ACTION_UNSUSPEND]);
@ -36,7 +36,9 @@ class SuspensionService
// suspended in the database. Additionally, nothing needs to happen if the server // suspended in the database. Additionally, nothing needs to happen if the server
// is not suspended, and we try to un-suspend the instance. // is not suspended, and we try to un-suspend the instance.
if ($isSuspending === $server->isSuspended()) { if ($isSuspending === $server->isSuspended()) {
return Notification::make()->danger()->title('Failed!')->body('Server is already suspended!')->send(); Notification::make()->danger()->title('Failed!')->body('Server is already suspended!')->send();
return;
} }
// Check if the server is currently being transferred. // Check if the server is currently being transferred.

View File

@ -106,7 +106,7 @@ class TransferServerService
/** /**
* Assigns the specified allocations to the specified server. * Assigns the specified allocations to the specified server.
*/ */
private function assignAllocationsToServer(Server $server, int $node_id, int $allocation_id, array $additional_allocations) private function assignAllocationsToServer(Server $server, int $node_id, int $allocation_id, array $additional_allocations): void
{ {
$allocations = $additional_allocations; $allocations = $additional_allocations;
$allocations[] = $allocation_id; $allocations[] = $allocation_id;

View File

@ -9,7 +9,7 @@ trait PlainJavascriptInjection
/** /**
* Injects statistics into javascript. * Injects statistics into javascript.
*/ */
public function injectJavascript($data) public function injectJavascript($data): void
{ {
\JavaScript::put($data); \JavaScript::put($data);
} }

View File

@ -15,7 +15,7 @@ class EggVariableTransformer extends BaseTransformer
return Egg::RESOURCE_NAME; return Egg::RESOURCE_NAME;
} }
public function transform(EggVariable $model) public function transform(EggVariable $model): array
{ {
return $model->toArray(); return $model->toArray();
} }

View File

@ -22,7 +22,7 @@ class MountTransformer extends BaseTransformer
return Mount::RESOURCE_NAME; return Mount::RESOURCE_NAME;
} }
public function transform(Mount $model) public function transform(Mount $model): array
{ {
return $model->toArray(); return $model->toArray();
} }

View File

@ -30,7 +30,7 @@ class ServerTransformer extends BaseTransformer
/** /**
* Perform dependency injection. * Perform dependency injection.
*/ */
public function handle(EnvironmentService $environmentService) public function handle(EnvironmentService $environmentService): void
{ {
$this->environmentService = $environmentService; $this->environmentService = $environmentService;
} }

View File

@ -6,6 +6,7 @@ use Illuminate\Support\Str;
use App\Models\User; use App\Models\User;
use App\Models\ActivityLog; use App\Models\ActivityLog;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use League\Fractal\Resource\ResourceAbstract;
class ActivityLogTransformer extends BaseClientTransformer class ActivityLogTransformer extends BaseClientTransformer
{ {
@ -34,7 +35,7 @@ class ActivityLogTransformer extends BaseClientTransformer
]; ];
} }
public function includeActor(ActivityLog $model) public function includeActor(ActivityLog $model): ResourceAbstract
{ {
if (!$model->actor instanceof User) { if (!$model->actor instanceof User) {
return $this->null(); return $this->null();

View File

@ -10,7 +10,7 @@ class DatabaseSeeder extends Seeder
/** /**
* Run the database seeds. * Run the database seeds.
*/ */
public function run() public function run(): void
{ {
$this->call(EggSeeder::class); $this->call(EggSeeder::class);

View File

@ -34,7 +34,7 @@ class EggSeeder extends Seeder
/** /**
* Run the egg seeder. * Run the egg seeder.
*/ */
public function run() public function run(): void
{ {
foreach (static::$imports as $import) { foreach (static::$imports as $import) {
/* @noinspection PhpParamsInspection */ /* @noinspection PhpParamsInspection */
@ -45,7 +45,7 @@ class EggSeeder extends Seeder
/** /**
* Loop through the list of egg files and import them. * Loop through the list of egg files and import them.
*/ */
protected function parseEggFiles($name) protected function parseEggFiles($name): void
{ {
$files = new \DirectoryIterator(database_path('Seeders/eggs/' . kebab_case($name))); $files = new \DirectoryIterator(database_path('Seeders/eggs/' . kebab_case($name)));

View File

@ -4,17 +4,14 @@ includes:
parameters: parameters:
paths: paths:
- app/ - app
# Level 9 is the highest level level: 6
level: 5
ignoreErrors: ignoreErrors:
# Prologue\Alerts defines its methods from its configuration file dynamically # Prologue\Alerts defines its methods from its configuration file dynamically
- '#^Call to an undefined method Prologue\\Alerts\\AlertsMessageBag::(danger|success|info|warning)\(\)\.$#' - '#^Call to an undefined method Prologue\\Alerts\\AlertsMessageBag::(danger|success|info|warning)\(\)\.$#'
# excludePaths: - '#no value type specified in iterable#'
# - ./*/*/FileToBeExcluded.php - '#Unable to resolve the template type#'
# - '#does not specify its types#'
# checkMissingIterableValueType: false

View File

@ -76,7 +76,7 @@ abstract class ClientApiIntegrationTestCase extends IntegrationTestCase
* Asserts that the data passed through matches the output of the data from the transformer. This * Asserts that the data passed through matches the output of the data from the transformer. This
* will remove the "relationships" key when performing the comparison. * will remove the "relationships" key when performing the comparison.
*/ */
protected function assertJsonTransformedWith(array $data, Model|EloquentModel $model) protected function assertJsonTransformedWith(array $data, Model|EloquentModel $model): void
{ {
$reflect = new \ReflectionClass($model); $reflect = new \ReflectionClass($model);
$transformer = sprintf('\\App\\Transformers\\Api\\Client\\%sTransformer', $reflect->getShortName()); $transformer = sprintf('\\App\\Transformers\\Api\\Client\\%sTransformer', $reflect->getShortName());

View File

@ -43,7 +43,7 @@ abstract class IntegrationTestCase extends TestCase
* *
* @return array * @return array
*/ */
protected function connectionsToTransact() protected function connectionsToTransact(): array
{ {
return [DB::getDriverName()]; return [DB::getDriverName()];
} }