From 0179ade5572c66b8e584d58447487a7b4597ec8a Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sat, 8 Mar 2025 19:56:06 -0500 Subject: [PATCH] Add Laravel Data package, also some small fixes (#1065) * Simplify * Update these * Add Laravel Data * Remove unused imports * Quick fix * Fix double array * Update app/Console/Commands/Egg/CheckEggUpdatesCommand.php --- .../Commands/Egg/CheckEggUpdatesCommand.php | 14 +- .../OAuth/Providers/AuthentikProvider.php | 4 +- app/Models/ActivityLog.php | 2 +- app/Models/Allocation.php | 2 +- app/Models/ApiKey.php | 24 +- app/Models/Backup.php | 22 +- app/Models/Database.php | 16 +- app/Models/DatabaseHost.php | 16 +- app/Models/Egg.php | 36 +- app/Models/EggVariable.php | 22 +- app/Models/Mount.php | 22 +- app/Models/Node.php | 61 +- app/Models/Permission.php | 6 +- app/Models/RecoveryToken.php | 4 +- app/Models/Schedule.php | 26 +- app/Models/Server.php | 44 +- app/Models/ServerTransfer.php | 22 +- app/Models/ServerVariable.php | 8 +- app/Models/Subuser.php | 10 +- app/Models/Task.php | 16 +- app/Models/User.php | 22 +- app/Models/UserSSHKey.php | 2 +- .../Servers/StartupCommandService.php | 2 +- .../Servers/StartupModificationService.php | 3 +- .../Subusers/SubuserCreationService.php | 3 +- app/Traits/EnvironmentWriterTrait.php | 4 + app/Traits/HasValidation.php | 9 +- composer.json | 1 + composer.lock | 1562 +++++++++++++++-- 29 files changed, 1587 insertions(+), 398 deletions(-) diff --git a/app/Console/Commands/Egg/CheckEggUpdatesCommand.php b/app/Console/Commands/Egg/CheckEggUpdatesCommand.php index 7005054cf..b398f7ca9 100644 --- a/app/Console/Commands/Egg/CheckEggUpdatesCommand.php +++ b/app/Console/Commands/Egg/CheckEggUpdatesCommand.php @@ -34,15 +34,19 @@ class CheckEggUpdatesCommand extends Command $currentJson = json_decode($exporterService->handle($egg->id)); unset($currentJson->exported_at); - $updatedJson = json_decode(file_get_contents($egg->update_url)); + $updatedEgg = file_get_contents($egg->update_url); + assert($updatedEgg !== false); + $updatedJson = json_decode($updatedEgg); unset($updatedJson->exported_at); - if (md5(json_encode($currentJson)) === md5(json_encode($updatedJson))) { + if (md5(json_encode($currentJson, JSON_THROW_ON_ERROR)) === md5(json_encode($updatedJson, JSON_THROW_ON_ERROR))) { $this->info("$egg->name: Up-to-date"); cache()->put("eggs.$egg->uuid.update", false, now()->addHour()); - } else { - $this->warn("$egg->name: Found update"); - cache()->put("eggs.$egg->uuid.update", true, now()->addHour()); + + return; } + + $this->warn("$egg->name: Found update"); + cache()->put("eggs.$egg->uuid.update", true, now()->addHour()); } } diff --git a/app/Extensions/OAuth/Providers/AuthentikProvider.php b/app/Extensions/OAuth/Providers/AuthentikProvider.php index d83d4526f..f6be54a99 100644 --- a/app/Extensions/OAuth/Providers/AuthentikProvider.php +++ b/app/Extensions/OAuth/Providers/AuthentikProvider.php @@ -59,12 +59,12 @@ final class AuthentikProvider extends OAuthProvider public function getName(): string { - return env('OAUTH_AUTHENTIK_DISPLAY_NAME') ?? 'Authentik'; + return env('OAUTH_AUTHENTIK_DISPLAY_NAME', 'Authentik'); } public function getHexColor(): string { - return env('OAUTH_AUTHENTIK_DISPLAY_COLOR') ?? '#fd4b2d'; + return env('OAUTH_AUTHENTIK_DISPLAY_COLOR', '#fd4b2d'); } public static function register(Application $app): self diff --git a/app/Models/ActivityLog.php b/app/Models/ActivityLog.php index 84677e525..cad17c3e6 100644 --- a/app/Models/ActivityLog.php +++ b/app/Models/ActivityLog.php @@ -72,7 +72,7 @@ class ActivityLog extends Model implements HasIcon, HasLabel protected $with = ['subjects']; - /** @var array */ + /** @var array */ public static array $validationRules = [ 'event' => ['required', 'string'], 'batch' => ['nullable', 'uuid'], diff --git a/app/Models/Allocation.php b/app/Models/Allocation.php index 016fc54af..505ed4a2e 100644 --- a/app/Models/Allocation.php +++ b/app/Models/Allocation.php @@ -57,7 +57,7 @@ class Allocation extends Model */ protected $guarded = ['id', 'created_at', 'updated_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ 'node_id' => ['required', 'exists:nodes,id'], 'ip' => ['required', 'ip'], diff --git a/app/Models/ApiKey.php b/app/Models/ApiKey.php index d80e572c9..36d13d1af 100644 --- a/app/Models/ApiKey.php +++ b/app/Models/ApiKey.php @@ -110,19 +110,19 @@ class ApiKey extends PersonalAccessToken */ protected $hidden = ['token']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'user_id' => 'required|exists:users,id', - 'key_type' => 'present|integer|min:0|max:2', - 'identifier' => 'required|string|size:16|unique:api_keys,identifier', - 'token' => 'required|string', - 'permissions' => 'array', - 'permissions.*' => 'integer|min:0|max:3', - 'memo' => 'required|nullable|string|max:500', - 'allowed_ips' => 'array', - 'allowed_ips.*' => 'string', - 'last_used_at' => 'nullable|date', - 'expires_at' => 'nullable|date', + 'user_id' => ['required', 'exists:users,id'], + 'key_type' => ['present', 'integer', 'min:0', 'max:2'], + 'identifier' => ['required', 'string', 'size:16', 'unique:api_keys,identifier'], + 'token' => ['required', 'string'], + 'permissions' => ['array'], + 'permissions.*' => ['integer', 'min:0', 'max:3'], + 'memo' => ['required', 'nullable', 'string', 'max:500'], + 'allowed_ips' => ['array'], + 'allowed_ips.*' => ['string'], + 'last_used_at' => ['nullable', 'date'], + 'expires_at' => ['nullable', 'date'], ]; protected function casts(): array diff --git a/app/Models/Backup.php b/app/Models/Backup.php index 500b4df3f..b4f807a4f 100644 --- a/app/Models/Backup.php +++ b/app/Models/Backup.php @@ -50,18 +50,18 @@ class Backup extends Model implements Validatable protected $guarded = ['id', 'created_at', 'updated_at', 'deleted_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'server_id' => 'bail|required|numeric|exists:servers,id', - 'uuid' => 'required|uuid', - 'is_successful' => 'boolean', - 'is_locked' => 'boolean', - 'name' => 'required|string', - 'ignored_files' => 'array', - 'disk' => 'required|string', - 'checksum' => 'nullable|string', - 'bytes' => 'numeric', - 'upload_id' => 'nullable|string', + 'server_id' => ['bail', 'required', 'numeric', 'exists:servers,id'], + 'uuid' => ['required', 'uuid'], + 'is_successful' => ['boolean'], + 'is_locked' => ['boolean'], + 'name' => ['required', 'string'], + 'ignored_files' => ['array'], + 'disk' => ['required', 'string'], + 'checksum' => ['nullable', 'string'], + 'bytes' => ['numeric'], + 'upload_id' => ['nullable', 'string'], ]; protected function casts(): array diff --git a/app/Models/Database.php b/app/Models/Database.php index c1b3da0fd..80fac2c38 100644 --- a/app/Models/Database.php +++ b/app/Models/Database.php @@ -50,15 +50,15 @@ class Database extends Model implements Validatable 'server_id', 'database_host_id', 'database', 'username', 'password', 'remote', 'max_connections', ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'server_id' => 'required|numeric|exists:servers,id', - 'database_host_id' => 'required|exists:database_hosts,id', - 'database' => 'required|string|alpha_dash|between:3,48', - 'username' => 'string|alpha_dash|between:3,100', - 'max_connections' => 'nullable|integer', - 'remote' => 'required|string|regex:/^[\w\-\/.%:]+$/', - 'password' => 'string', + 'server_id' => ['required', 'numeric', 'exists:servers,id'], + 'database_host_id' => ['required', 'exists:database_hosts,id'], + 'database' => ['required', 'string', 'alpha_dash', 'between:3,48'], + 'username' => ['string', 'alpha_dash', 'between:3,100'], + 'max_connections' => ['nullable', 'integer'], + 'remote' => ['required', 'string', 'regex:/^[\w\-\/.%:]+$/'], + 'password' => ['string'], ]; protected function casts(): array diff --git a/app/Models/DatabaseHost.php b/app/Models/DatabaseHost.php index 4e5497c16..c8512c1de 100644 --- a/app/Models/DatabaseHost.php +++ b/app/Models/DatabaseHost.php @@ -48,15 +48,15 @@ class DatabaseHost extends Model implements Validatable 'name', 'host', 'port', 'username', 'password', 'max_databases', ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'name' => 'required|string|max:255', - 'host' => 'required|string', - 'port' => 'required|numeric|between:1,65535', - 'username' => 'required|string|max:32', - 'password' => 'nullable|string', - 'node_ids' => 'nullable|array', - 'node_ids.*' => 'required|integer,exists:nodes,id', + 'name' => ['required', 'string', 'max:255'], + 'host' => ['required', 'string'], + 'port' => ['required', 'numeric', 'between:1,65535'], + 'username' => ['required', 'string', 'max:32'], + 'password' => ['nullable', 'string'], + 'node_ids' => ['nullable', 'array'], + 'node_ids.*' => ['required', 'integer,exists:nodes,id'], ]; protected function casts(): array diff --git a/app/Models/Egg.php b/app/Models/Egg.php index fa20ec494..1852fa5f7 100644 --- a/app/Models/Egg.php +++ b/app/Models/Egg.php @@ -109,25 +109,25 @@ class Egg extends Model implements Validatable 'tags', ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'uuid' => 'required|string|size:36', - 'name' => 'required|string|max:255', - 'description' => 'string|nullable', - 'features' => 'array|nullable', - 'author' => 'required|string|email', - 'file_denylist' => 'array|nullable', - 'file_denylist.*' => 'string', - 'docker_images' => 'required|array|min:1', - 'docker_images.*' => 'required|string', - 'startup' => 'required|nullable|string', - 'config_from' => 'sometimes|bail|nullable|numeric|exists:eggs,id', - 'config_stop' => 'required_without:config_from|nullable|string|max:255', - 'config_startup' => 'required_without:config_from|nullable|json', - 'config_logs' => 'required_without:config_from|nullable|json', - 'config_files' => 'required_without:config_from|nullable|json', - 'update_url' => 'sometimes|nullable|string', - 'force_outgoing_ip' => 'sometimes|boolean', + 'uuid' => ['required', 'string', 'size:36'], + 'name' => ['required', 'string', 'max:255'], + 'description' => ['string', 'nullable'], + 'features' => ['array', 'nullable'], + 'author' => ['required', 'string', 'email'], + 'file_denylist' => ['array', 'nullable'], + 'file_denylist.*' => ['string'], + 'docker_images' => ['required', 'array', 'min:1'], + 'docker_images.*' => ['required', 'string'], + 'startup' => ['required', 'nullable', 'string'], + 'config_from' => ['sometimes', 'bail', 'nullable', 'numeric', 'exists:eggs,id'], + 'config_stop' => ['required_without:config_from', 'nullable', 'string', 'max:255'], + 'config_startup' => ['required_without:config_from', 'nullable', 'json'], + 'config_logs' => ['required_without:config_from', 'nullable', 'json'], + 'config_files' => ['required_without:config_from', 'nullable', 'json'], + 'update_url' => ['sometimes', 'nullable', 'string'], + 'force_outgoing_ip' => ['sometimes', 'boolean'], ]; protected $attributes = [ diff --git a/app/Models/EggVariable.php b/app/Models/EggVariable.php index 4beb5c5ba..308fe8b2a 100644 --- a/app/Models/EggVariable.php +++ b/app/Models/EggVariable.php @@ -51,18 +51,18 @@ class EggVariable extends Model implements Validatable */ protected $guarded = ['id', 'created_at', 'updated_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'egg_id' => 'exists:eggs,id', - 'sort' => 'nullable', - 'name' => 'required|string|between:1,255', - 'description' => 'string', - 'env_variable' => 'required|alphaDash|between:1,255|notIn:' . self::RESERVED_ENV_NAMES, - 'default_value' => 'string', - 'user_viewable' => 'boolean', - 'user_editable' => 'boolean', - 'rules' => 'array', - 'rules.*' => 'string', + 'egg_id' => ['exists:eggs,id'], + 'sort' => ['nullable'], + 'name' => ['required', 'string', 'between:1,255'], + 'description' => ['string'], + 'env_variable' => ['required', 'alphaDash', 'between:1,255', 'notIn:' . self::RESERVED_ENV_NAMES], + 'default_value' => ['string'], + 'user_viewable' => ['boolean'], + 'user_editable' => ['boolean'], + 'rules' => ['array'], + 'rules.*' => ['string'], ]; protected $attributes = [ diff --git a/app/Models/Mount.php b/app/Models/Mount.php index 94d6860d4..ebcd51e2d 100644 --- a/app/Models/Mount.php +++ b/app/Models/Mount.php @@ -5,7 +5,6 @@ namespace App\Models; use App\Contracts\Validatable; use App\Traits\HasValidation; use Illuminate\Database\Eloquent\Model; -use Illuminate\Validation\Rules\NotIn; use Illuminate\Database\Eloquent\Relations\BelongsToMany; /** @@ -41,28 +40,27 @@ class Mount extends Model implements Validatable /** * Rules verifying that the data being stored matches the expectations of the database. * - * @var array> + * @var array */ public static array $validationRules = [ - 'name' => 'required|string|min:2|max:64|unique:mounts,name', - 'description' => 'nullable|string|max:255', - 'source' => 'required|string', - 'target' => 'required|string', - 'read_only' => 'sometimes|boolean', - 'user_mountable' => 'sometimes|boolean', + 'name' => ['required', 'string', 'min:2', 'max:64', 'unique:mounts,name'], + 'description' => ['nullable', 'string', 'max:255'], + 'source' => ['required', 'string'], + 'target' => ['required', 'string'], + 'read_only' => ['sometimes', 'boolean'], + 'user_mountable' => ['sometimes', 'boolean'], ]; /** * Implement language verification by overriding Eloquence's gather rules function. * - * @return array + * @return array */ public static function getRules(): array { $rules = self::getValidationRules(); - - $rules['source'][] = new NotIn(Mount::$invalidSourcePaths); - $rules['target'][] = new NotIn(Mount::$invalidTargetPaths); + $rules['source'][] = 'not_in:' . implode(',', Mount::$invalidSourcePaths); + $rules['target'][] = 'not_in:' . implode(',', Mount::$invalidTargetPaths); return $rules; } diff --git a/app/Models/Node.php b/app/Models/Node.php index ce74560c9..c1c8a4a01 100644 --- a/app/Models/Node.php +++ b/app/Models/Node.php @@ -13,7 +13,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Notifications\Notifiable; -use Illuminate\Support\Collection; use Illuminate\Support\Facades\Http; use Illuminate\Support\Str; use Symfony\Component\Yaml\Yaml; @@ -85,26 +84,26 @@ class Node extends Model implements Validatable 'description', 'maintenance_mode', 'tags', ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'name' => 'required|string|min:1|max:100', - 'description' => 'string|nullable', - 'public' => 'boolean', - 'fqdn' => 'required|string', - 'scheme' => 'required|string|in:http,https', - 'behind_proxy' => 'boolean', - 'memory' => 'required|numeric|min:0', - 'memory_overallocate' => 'required|numeric|min:-1', - 'disk' => 'required|numeric|min:0', - 'disk_overallocate' => 'required|numeric|min:-1', - 'cpu' => 'required|numeric|min:0', - 'cpu_overallocate' => 'required|numeric|min:-1', - 'daemon_base' => 'sometimes|required|regex:/^([\/][\d\w.\-\/]+)$/', - 'daemon_sftp' => 'required|numeric|between:1,65535', - 'daemon_sftp_alias' => 'nullable|string', - 'daemon_listen' => 'required|numeric|between:1,65535', - 'maintenance_mode' => 'boolean', - 'upload_size' => 'int|between:1,1024', + 'name' => ['required', 'string', 'min:1', 'max:100'], + 'description' => ['string', 'nullable'], + 'public' => ['boolean'], + 'fqdn' => ['required', 'string'], + 'scheme' => ['required', 'string', 'in:http,https'], + 'behind_proxy' => ['boolean'], + 'memory' => ['required', 'numeric', 'min:0'], + 'memory_overallocate' => ['required', 'numeric', 'min:-1'], + 'disk' => ['required', 'numeric', 'min:0'], + 'disk_overallocate' => ['required', 'numeric', 'min:-1'], + 'cpu' => ['required', 'numeric', 'min:0'], + 'cpu_overallocate' => ['required', 'numeric', 'min:-1'], + 'daemon_base' => ['sometimes', 'required', 'regex:/^([\/][\d\w.\-\/]+)$/'], + 'daemon_sftp' => ['required', 'numeric', 'between:1,65535'], + 'daemon_sftp_alias' => ['nullable', 'string'], + 'daemon_listen' => ['required', 'numeric', 'between:1,65535'], + 'maintenance_mode' => ['boolean'], + 'upload_size' => ['int', 'between:1,1024'], ]; /** @@ -297,28 +296,6 @@ class Node extends Model implements Validatable return true; } - public static function getForServerCreation(): Collection - { - return self::with('allocations')->get()->map(function (Node $item) { - $filtered = $item->getRelation('allocations')->where('server_id', null)->map(function ($map) { - return collect($map)->only(['id', 'ip', 'port']); - }); - - $ports = $filtered->map(function ($map) { - return [ - 'id' => $map['id'], - 'text' => sprintf('%s:%s', $map['ip'], $map['port']), - ]; - })->values(); - - return [ - 'id' => $item->id, - 'text' => $item->name, - 'allocations' => $ports, - ]; - })->values(); - } - /** @return array */ public function systemInformation(): array { diff --git a/app/Models/Permission.php b/app/Models/Permission.php index 271ab3c9f..02b3870b6 100644 --- a/app/Models/Permission.php +++ b/app/Models/Permission.php @@ -107,10 +107,10 @@ class Permission extends Model implements Validatable */ protected $guarded = ['id', 'created_at', 'updated_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'subuser_id' => 'required|numeric|min:1', - 'permission' => 'required|string', + 'subuser_id' => ['required', 'numeric', 'min:1'], + 'permission' => ['required', 'string'], ]; /** diff --git a/app/Models/RecoveryToken.php b/app/Models/RecoveryToken.php index e8db49264..ba64b82f0 100644 --- a/app/Models/RecoveryToken.php +++ b/app/Models/RecoveryToken.php @@ -25,9 +25,9 @@ class RecoveryToken extends Model implements Validatable public $timestamps = true; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'token' => 'required|string', + 'token' => ['required', 'string'], ]; protected function casts(): array diff --git a/app/Models/Schedule.php b/app/Models/Schedule.php index 364213b80..295663d8a 100644 --- a/app/Models/Schedule.php +++ b/app/Models/Schedule.php @@ -75,20 +75,20 @@ class Schedule extends Model implements Validatable 'only_when_online' => false, ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'server_id' => 'required|exists:servers,id', - 'name' => 'required|string|max:255', - 'cron_day_of_week' => 'required|string', - 'cron_month' => 'required|string', - 'cron_day_of_month' => 'required|string', - 'cron_hour' => 'required|string', - 'cron_minute' => 'required|string', - 'is_active' => 'boolean', - 'is_processing' => 'boolean', - 'only_when_online' => 'boolean', - 'last_run_at' => 'nullable|date', - 'next_run_at' => 'nullable|date', + 'server_id' => ['required', 'exists:servers,id'], + 'name' => ['required', 'string', 'max:255'], + 'cron_day_of_week' => ['required', 'string'], + 'cron_month' => ['required', 'string'], + 'cron_day_of_month' => ['required', 'string'], + 'cron_hour' => ['required', 'string'], + 'cron_minute' => ['required', 'string'], + 'is_active' => ['boolean'], + 'is_processing' => ['boolean'], + 'only_when_online' => ['boolean'], + 'last_run_at' => ['nullable', 'date'], + 'next_run_at' => ['nullable', 'date'], ]; protected function casts(): array diff --git a/app/Models/Server.php b/app/Models/Server.php index c0e4a274c..ff46d6695 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -157,29 +157,29 @@ class Server extends Model implements Validatable */ protected $guarded = ['id', self::CREATED_AT, self::UPDATED_AT, 'deleted_at', 'installed_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'external_id' => 'sometimes|nullable|string|between:1,255|unique:servers', - 'owner_id' => 'required|integer|exists:users,id', - 'name' => 'required|string|min:1|max:255', - 'node_id' => 'required|exists:nodes,id', - 'description' => 'string', - 'status' => 'nullable|string', - 'memory' => 'required|numeric|min:0', - 'swap' => 'required|numeric|min:-1', - 'io' => 'required|numeric|between:0,1000', - 'cpu' => 'required|numeric|min:0', - 'threads' => 'nullable|regex:/^[0-9-,]+$/', - 'oom_killer' => 'sometimes|boolean', - 'disk' => 'required|numeric|min:0', - 'allocation_id' => 'required|bail|unique:servers|exists:allocations,id', - 'egg_id' => 'required|exists:eggs,id', - 'startup' => 'required|string', - 'skip_scripts' => 'sometimes|boolean', - 'image' => 'required|string|max:255', - 'database_limit' => 'present|nullable|integer|min:0', - 'allocation_limit' => 'sometimes|nullable|integer|min:0', - 'backup_limit' => 'present|nullable|integer|min:0', + 'external_id' => ['sometimes', 'nullable', 'string', 'between:1,255', 'unique:servers'], + 'owner_id' => ['required', 'integer', 'exists:users,id'], + 'name' => ['required', 'string', 'min:1', 'max:255'], + 'node_id' => ['required', 'exists:nodes,id'], + 'description' => ['string'], + 'status' => ['nullable', 'string'], + 'memory' => ['required', 'numeric', 'min:0'], + 'swap' => ['required', 'numeric', 'min:-1'], + 'io' => ['required', 'numeric', 'between:0,1000'], + 'cpu' => ['required', 'numeric', 'min:0'], + 'threads' => ['nullable', 'regex:/^[0-9-,]+$/'], + 'oom_killer' => ['sometimes', 'boolean'], + 'disk' => ['required', 'numeric', 'min:0'], + 'allocation_id' => ['required', 'bail', 'unique:servers', 'exists:allocations,id'], + 'egg_id' => ['required', 'exists:eggs,id'], + 'startup' => ['required', 'string'], + 'skip_scripts' => ['sometimes', 'boolean'], + 'image' => ['required', 'string', 'max:255'], + 'database_limit' => ['present', 'nullable', 'integer', 'min:0'], + 'allocation_limit' => ['sometimes', 'nullable', 'integer', 'min:0'], + 'backup_limit' => ['present', 'nullable', 'integer', 'min:0'], ]; protected function casts(): array diff --git a/app/Models/ServerTransfer.php b/app/Models/ServerTransfer.php index 2dae90786..36bf08135 100644 --- a/app/Models/ServerTransfer.php +++ b/app/Models/ServerTransfer.php @@ -40,18 +40,18 @@ class ServerTransfer extends Model implements Validatable */ protected $guarded = ['id', 'created_at', 'updated_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'server_id' => 'required|numeric|exists:servers,id', - 'old_node' => 'required|numeric', - 'new_node' => 'required|numeric', - 'old_allocation' => 'required|numeric', - 'new_allocation' => 'required|numeric', - 'old_additional_allocations' => 'nullable|array', - 'old_additional_allocations.*' => 'numeric', - 'new_additional_allocations' => 'nullable|array', - 'new_additional_allocations.*' => 'numeric', - 'successful' => 'sometimes|nullable|boolean', + 'server_id' => ['required', 'numeric', 'exists:servers,id'], + 'old_node' => ['required', 'numeric'], + 'new_node' => ['required', 'numeric'], + 'old_allocation' => ['required', 'numeric'], + 'new_allocation' => ['required', 'numeric'], + 'old_additional_allocations' => ['nullable', 'array'], + 'old_additional_allocations.*' => ['numeric'], + 'new_additional_allocations' => ['nullable', 'array'], + 'new_additional_allocations.*' => ['numeric'], + 'successful' => ['sometimes', 'nullable', 'boolean'], ]; protected function casts(): array diff --git a/app/Models/ServerVariable.php b/app/Models/ServerVariable.php index 2b19c5490..17ba007fe 100644 --- a/app/Models/ServerVariable.php +++ b/app/Models/ServerVariable.php @@ -29,11 +29,11 @@ class ServerVariable extends Model implements Validatable protected $guarded = ['id', 'created_at', 'updated_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'server_id' => 'required|int', - 'variable_id' => 'required|int', - 'variable_value' => 'string', + 'server_id' => ['required', 'int'], + 'variable_id' => ['required', 'int'], + 'variable_value' => ['string'], ]; protected function casts(): array diff --git a/app/Models/Subuser.php b/app/Models/Subuser.php index 30b82935f..babb18c33 100644 --- a/app/Models/Subuser.php +++ b/app/Models/Subuser.php @@ -37,12 +37,12 @@ class Subuser extends Model implements Validatable */ protected $guarded = ['id', 'created_at', 'updated_at']; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'user_id' => 'required|numeric|exists:users,id', - 'server_id' => 'required|numeric|exists:servers,id', - 'permissions' => 'nullable|array', - 'permissions.*' => 'string', + 'user_id' => ['required', 'numeric', 'exists:users,id'], + 'server_id' => ['required', 'numeric', 'exists:servers,id'], + 'permissions' => ['nullable', 'array'], + 'permissions.*' => ['string'], ]; protected function casts(): array diff --git a/app/Models/Task.php b/app/Models/Task.php index b08e5a511..f75d786d4 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -74,15 +74,15 @@ class Task extends Model implements Validatable 'continue_on_failure' => false, ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'schedule_id' => 'required|numeric|exists:schedules,id', - 'sequence_id' => 'required|numeric|min:1', - 'action' => 'required|string', - 'payload' => 'required_unless:action,backup|string', - 'time_offset' => 'required|numeric|between:0,900', - 'is_queued' => 'boolean', - 'continue_on_failure' => 'boolean', + 'schedule_id' => ['required', 'numeric', 'exists:schedules,id'], + 'sequence_id' => ['required', 'numeric', 'min:1'], + 'action' => ['required', 'string'], + 'payload' => ['required_unless:action,backup', 'string'], + 'time_offset' => ['required', 'numeric', 'between:0,900'], + 'is_queued' => ['boolean'], + 'continue_on_failure' => ['boolean'], ]; protected function casts(): array diff --git a/app/Models/User.php b/app/Models/User.php index 88afbeb59..8af49485e 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -145,18 +145,18 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac 'oauth' => '[]', ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ - 'uuid' => 'nullable|string|size:36|unique:users,uuid', - 'email' => 'required|email|between:1,255|unique:users,email', - 'external_id' => 'sometimes|nullable|string|max:255|unique:users,external_id', - 'username' => 'required|between:1,255|unique:users,username', - 'password' => 'sometimes|nullable|string', - 'language' => 'string', - 'timezone' => 'string', - 'use_totp' => 'boolean', - 'totp_secret' => 'nullable|string', - 'oauth' => 'array|nullable', + 'uuid' => ['nullable', 'string', 'size:36', 'unique:users,uuid'], + 'email' => ['required', 'email', 'between:1,255', 'unique:users,email'], + 'external_id' => ['sometimes', 'nullable', 'string', 'max:255', 'unique:users,external_id'], + 'username' => ['required', 'between:1,255', 'unique:users,username'], + 'password' => ['sometimes', 'nullable', 'string'], + 'language' => ['string'], + 'timezone' => ['string'], + 'use_totp' => ['boolean'], + 'totp_secret' => ['nullable', 'string'], + 'oauth' => ['array', 'nullable'], ]; protected function casts(): array diff --git a/app/Models/UserSSHKey.php b/app/Models/UserSSHKey.php index 3c643f15f..e6cc28638 100644 --- a/app/Models/UserSSHKey.php +++ b/app/Models/UserSSHKey.php @@ -53,7 +53,7 @@ class UserSSHKey extends Model 'fingerprint', ]; - /** @var array */ + /** @var array */ public static array $validationRules = [ 'name' => ['required', 'string'], 'fingerprint' => ['required', 'string'], diff --git a/app/Services/Servers/StartupCommandService.php b/app/Services/Servers/StartupCommandService.php index 4703eb075..172795fc0 100644 --- a/app/Services/Servers/StartupCommandService.php +++ b/app/Services/Servers/StartupCommandService.php @@ -12,7 +12,7 @@ class StartupCommandService public function handle(Server $server, bool $hideAllValues = false): string { $find = ['{{SERVER_MEMORY}}', '{{SERVER_IP}}', '{{SERVER_PORT}}']; - $replace = [$server->memory, $server->allocation->ip, $server->allocation->port]; + $replace = [(string) $server->memory, $server->allocation->ip, (string) $server->allocation->port]; foreach ($server->variables as $variable) { $find[] = '{{' . $variable->env_variable . '}}'; diff --git a/app/Services/Servers/StartupModificationService.php b/app/Services/Servers/StartupModificationService.php index 815fce2e9..fe8a74c9c 100644 --- a/app/Services/Servers/StartupModificationService.php +++ b/app/Services/Servers/StartupModificationService.php @@ -77,8 +77,7 @@ class StartupModificationService $eggId = Arr::get($data, 'egg_id'); if (is_digit($eggId) && $server->egg_id !== (int) $eggId) { - /** @var \App\Models\Egg $egg */ - $egg = Egg::query()->findOrFail($data['egg_id']); + $egg = Egg::findOrFail($data['egg_id']); $server = $server->forceFill([ 'egg_id' => $egg->id, diff --git a/app/Services/Subusers/SubuserCreationService.php b/app/Services/Subusers/SubuserCreationService.php index 51e4f758c..4fe6e5093 100644 --- a/app/Services/Subusers/SubuserCreationService.php +++ b/app/Services/Subusers/SubuserCreationService.php @@ -42,7 +42,8 @@ class SubuserCreationService if (!$user) { // Just cap the username generated at 64 characters at most and then append a random string // to the end to make it "unique"... - $username = substr(preg_replace('/([^\w\.-]+)/', '', strtok($email, '@')), 0, 64) . Str::random(3); + [$beforeDomain] = explode('@', $email, 1); + $username = substr(preg_replace('/([^\w.-]+)/', '', $beforeDomain), 0, 64) . Str::random(3); $user = $this->userCreationService->handle([ 'email' => $email, diff --git a/app/Traits/EnvironmentWriterTrait.php b/app/Traits/EnvironmentWriterTrait.php index ea8a03e6e..20a0c1680 100644 --- a/app/Traits/EnvironmentWriterTrait.php +++ b/app/Traits/EnvironmentWriterTrait.php @@ -35,6 +35,10 @@ trait EnvironmentWriterTrait } $saveContents = file_get_contents($path); + if ($saveContents === false) { + $saveContents = ''; + } + collect($values)->each(function ($value, $key) use (&$saveContents) { $key = strtoupper($key); $saveValue = sprintf('%s=%s', $key, $this->escapeEnvironmentValue($value ?? '')); diff --git a/app/Traits/HasValidation.php b/app/Traits/HasValidation.php index 131497830..b6ec96e66 100644 --- a/app/Traits/HasValidation.php +++ b/app/Traits/HasValidation.php @@ -32,16 +32,11 @@ trait HasValidation /** * Returns the rules associated with this model. * - * @return array> + * @return array */ public static function getRules(): array { - $rules = static::$validationRules; - foreach ($rules as &$rule) { - $rule = is_array($rule) ? $rule : explode('|', $rule); - } - - return $rules; + return static::$validationRules; } /** diff --git a/composer.json b/composer.json index da55afcb2..d4a326500 100644 --- a/composer.json +++ b/composer.json @@ -34,6 +34,7 @@ "socialiteproviders/authentik": "^5.2", "socialiteproviders/discord": "^4.2", "socialiteproviders/steam": "^4.3", + "spatie/laravel-data": "^4.13", "spatie/laravel-fractal": "^6.3", "spatie/laravel-health": "^1.32", "spatie/laravel-permission": "^6.16", diff --git a/composer.lock b/composer.lock index dbf4f5bfc..e346bed57 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": "bb91c0168d78ddd48801caaed75dd53f", + "content-hash": "ca33e335f355dd9ee36360f7672ac9fc", "packages": [ { "name": "abdelhamiderrahmouni/filament-monaco-editor", @@ -90,6 +90,814 @@ ], "time": "2024-05-16T10:37:32+00:00" }, + { + "name": "amphp/amp", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", + "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "5.23.1" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Future/functions.php", + "src/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v3.1.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-01-26T16:07:39+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "daa00f2efdbd71565bf64ffefa89e37542addf93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/daa00f2efdbd71565bf64ffefa89e37542addf93", + "reference": "daa00f2efdbd71565bf64ffefa89e37542addf93", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/parser": "^1.1", + "amphp/pipeline": "^1", + "amphp/serialization": "^1", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2.3" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.22.1" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Internal/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "https://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v2.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-02-17T04:49:38+00:00" + }, + { + "name": "amphp/cache", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/cache.git", + "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/cache/zipball/46912e387e6aa94933b61ea1ead9cf7540b7797c", + "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/serialization": "^1", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Cache\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + } + ], + "description": "A fiber-aware cache API based on Amp and Revolt.", + "homepage": "https://amphp.org/cache", + "support": { + "issues": "https://github.com/amphp/cache/issues", + "source": "https://github.com/amphp/cache/tree/v2.0.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-19T03:38:06+00:00" + }, + { + "name": "amphp/dns", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/dns.git", + "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", + "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/cache": "^2", + "amphp/parser": "^1", + "amphp/process": "^2", + "daverandom/libdns": "^2.0.2", + "ext-filter": "*", + "ext-json": "*", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Dns\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Wright", + "email": "addr@daverandom.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + } + ], + "description": "Async DNS resolution for Amp.", + "homepage": "https://github.com/amphp/dns", + "keywords": [ + "amp", + "amphp", + "async", + "client", + "dns", + "resolve" + ], + "support": { + "issues": "https://github.com/amphp/dns/issues", + "source": "https://github.com/amphp/dns/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-01-19T15:43:40+00:00" + }, + { + "name": "amphp/parallel", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/parallel.git", + "reference": "5113111de02796a782f5d90767455e7391cca190" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parallel/zipball/5113111de02796a782f5d90767455e7391cca190", + "reference": "5113111de02796a782f5d90767455e7391cca190", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/cache": "^2", + "amphp/parser": "^1", + "amphp/pipeline": "^1", + "amphp/process": "^2", + "amphp/serialization": "^1", + "amphp/socket": "^2", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.18" + }, + "type": "library", + "autoload": { + "files": [ + "src/Context/functions.php", + "src/Context/Internal/functions.php", + "src/Ipc/functions.php", + "src/Worker/functions.php" + ], + "psr-4": { + "Amp\\Parallel\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" + } + ], + "description": "Parallel processing component for Amp.", + "homepage": "https://github.com/amphp/parallel", + "keywords": [ + "async", + "asynchronous", + "concurrent", + "multi-processing", + "multi-threading" + ], + "support": { + "issues": "https://github.com/amphp/parallel/issues", + "source": "https://github.com/amphp/parallel/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-12-21T01:56:09+00:00" + }, + { + "name": "amphp/parser", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/parser.git", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Parser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A generator parser to make streaming parsers simple.", + "homepage": "https://github.com/amphp/parser", + "keywords": [ + "async", + "non-blocking", + "parser", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/parser/issues", + "source": "https://github.com/amphp/parser/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-21T19:16:53+00:00" + }, + { + "name": "amphp/pipeline", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/pipeline.git", + "reference": "97cbf289f4d8877acfe58dd90ed5a4370a43caa4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/pipeline/zipball/97cbf289f4d8877acfe58dd90ed5a4370a43caa4", + "reference": "97cbf289f4d8877acfe58dd90ed5a4370a43caa4", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "php": ">=8.1", + "revolt/event-loop": "^1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.18" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Pipeline\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Asynchronous iterators and operators.", + "homepage": "https://amphp.org/pipeline", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "iterator", + "non-blocking" + ], + "support": { + "issues": "https://github.com/amphp/pipeline/issues", + "source": "https://github.com/amphp/pipeline/tree/v1.2.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-01-19T15:42:46+00:00" + }, + { + "name": "amphp/process", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/amphp/process.git", + "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/process/zipball/52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", + "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Process\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A fiber-aware process manager based on Amp and Revolt.", + "homepage": "https://amphp.org/process", + "support": { + "issues": "https://github.com/amphp/process/issues", + "source": "https://github.com/amphp/process/tree/v2.0.3" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-19T03:13:44+00:00" + }, + { + "name": "amphp/serialization", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/serialization.git", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "phpunit/phpunit": "^9 || ^8 || ^7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Serialization\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Serialization tools for IPC and data storage in PHP.", + "homepage": "https://github.com/amphp/serialization", + "keywords": [ + "async", + "asynchronous", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/amphp/serialization/issues", + "source": "https://github.com/amphp/serialization/tree/master" + }, + "time": "2020-03-25T21:39:07+00:00" + }, + { + "name": "amphp/socket", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/socket.git", + "reference": "58e0422221825b79681b72c50c47a930be7bf1e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/socket/zipball/58e0422221825b79681b72c50c47a930be7bf1e1", + "reference": "58e0422221825b79681b72c50c47a930be7bf1e1", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/dns": "^2", + "ext-openssl": "*", + "kelunik/certificate": "^1.1", + "league/uri": "^6.5 | ^7", + "league/uri-interfaces": "^2.3 | ^7", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "amphp/process": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Internal/functions.php", + "src/SocketAddress/functions.php" + ], + "psr-4": { + "Amp\\Socket\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@gmail.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", + "homepage": "https://github.com/amphp/socket", + "keywords": [ + "amp", + "async", + "encryption", + "non-blocking", + "sockets", + "tcp", + "tls" + ], + "support": { + "issues": "https://github.com/amphp/socket/issues", + "source": "https://github.com/amphp/socket/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-21T14:33:03+00:00" + }, + { + "name": "amphp/sync", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/sync.git", + "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1", + "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/pipeline": "^1", + "amphp/serialization": "^1", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.23" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Sync\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" + } + ], + "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", + "homepage": "https://github.com/amphp/sync", + "keywords": [ + "async", + "asynchronous", + "mutex", + "semaphore", + "synchronization" + ], + "support": { + "issues": "https://github.com/amphp/sync/issues", + "source": "https://github.com/amphp/sync/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-08-03T19:31:26+00:00" + }, { "name": "anourvalar/eloquent-serialize", "version": "1.2.29", @@ -1057,6 +1865,50 @@ ], "time": "2025-02-21T08:52:11+00:00" }, + { + "name": "daverandom/libdns", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/DaveRandom/LibDNS.git", + "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "Required for IDN support" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "LibDNS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "DNS protocol implementation written in pure PHP", + "keywords": [ + "dns" + ], + "support": { + "issues": "https://github.com/DaveRandom/LibDNS/issues", + "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0" + }, + "time": "2024-04-12T12:12:48+00:00" + }, { "name": "dedoc/scramble", "version": "v0.12.10", @@ -2889,6 +3741,64 @@ ], "time": "2025-02-03T10:55:03+00:00" }, + { + "name": "kelunik/certificate", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/kelunik/certificate.git", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">=7.0" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^6 | 7 | ^8 | ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Kelunik\\Certificate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Access certificate details and transform between different formats.", + "keywords": [ + "DER", + "certificate", + "certificates", + "openssl", + "pem", + "x509" + ], + "support": { + "issues": "https://github.com/kelunik/certificate/issues", + "source": "https://github.com/kelunik/certificate/tree/v1.1.3" + }, + "time": "2023-02-03T21:26:53+00:00" + }, { "name": "kirschbaum-development/eloquent-power-joins", "version": "4.2.1", @@ -5619,6 +6529,248 @@ }, "time": "2020-10-15T08:29:30+00:00" }, + { + "name": "phpdocumentor/reflection", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "bb4dea805a645553d6d989b23dad9f8041f39502" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/bb4dea805a645553d6d989b23dad9f8041f39502", + "reference": "bb4dea805a645553d6d989b23dad9f8041f39502", + "shasum": "" + }, + "require": { + "nikic/php-parser": "~4.18 || ^5.0", + "php": "8.1.*|8.2.*|8.3.*|8.4.*", + "phpdocumentor/reflection-common": "^2.1", + "phpdocumentor/reflection-docblock": "^5", + "phpdocumentor/type-resolver": "^1.2", + "symfony/polyfill-php80": "^1.28", + "webmozart/assert": "^1.7" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/coding-standard": "^12.0", + "mikey179/vfsstream": "~1.2", + "mockery/mockery": "~1.6.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^10.0", + "psalm/phar": "^5.24", + "rector/rector": "^1.0.0", + "squizlabs/php_codesniffer": "^3.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-5.x": "5.3.x-dev", + "dev-6.x": "6.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\": "src/phpDocumentor" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/Reflection/issues", + "source": "https://github.com/phpDocumentor/Reflection/tree/6.1.0" + }, + "time": "2024-11-22T15:11:54+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" + }, + "time": "2024-12-07T09:39:29+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.3", @@ -6716,6 +7868,78 @@ ], "time": "2024-04-27T21:32:50+00:00" }, + { + "name": "revolt/event-loop", + "version": "v1.0.7", + "source": { + "type": "git", + "url": "https://github.com/revoltphp/event-loop.git", + "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/09bf1bf7f7f574453efe43044b06fafe12216eb3", + "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.15" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Revolt\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "ceesjank@gmail.com" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Rock-solid event loop for concurrent PHP applications.", + "keywords": [ + "async", + "asynchronous", + "concurrency", + "event", + "event-loop", + "non-blocking", + "scheduler" + ], + "support": { + "issues": "https://github.com/revoltphp/event-loop/issues", + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.7" + }, + "time": "2025-01-25T19:27:39+00:00" + }, { "name": "ryangjchandler/blade-capture-directive", "version": "v1.1.0", @@ -7388,6 +8612,88 @@ ], "time": "2024-05-17T09:06:10+00:00" }, + { + "name": "spatie/laravel-data", + "version": "4.13.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-data.git", + "reference": "bd060f6d47ad4a3fac1f92162d76bfd9975b10ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/bd060f6d47ad4a3fac1f92162d76bfd9975b10ca", + "reference": "bd060f6d47ad4a3fac1f92162d76bfd9975b10ca", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0|^12.0", + "php": "^8.1", + "phpdocumentor/reflection": "^6.0", + "spatie/laravel-package-tools": "^1.9.0", + "spatie/php-structure-discoverer": "^2.0" + }, + "require-dev": { + "fakerphp/faker": "^1.14", + "friendsofphp/php-cs-fixer": "^3.0", + "livewire/livewire": "^3.0", + "mockery/mockery": "^1.6", + "nesbot/carbon": "^2.63|^3.0", + "orchestra/testbench": "^8.0|^9.0|^10.0", + "pestphp/pest": "^2.31|^3.0", + "pestphp/pest-plugin-laravel": "^2.0|^3.0", + "pestphp/pest-plugin-livewire": "^2.1|^3.0", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpunit/phpunit": "^10.0|^11.0|^12.0", + "spatie/invade": "^1.0", + "spatie/laravel-typescript-transformer": "^2.5", + "spatie/pest-plugin-snapshots": "^2.1", + "spatie/test-time": "^1.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelData\\LaravelDataServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\LaravelData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "Create unified resources and data transfer objects", + "homepage": "https://github.com/spatie/laravel-data", + "keywords": [ + "laravel", + "laravel-data", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-data/issues", + "source": "https://github.com/spatie/laravel-data/tree/4.13.2" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-03-03T09:59:10+00:00" + }, { "name": "spatie/laravel-fractal", "version": "6.3.2", @@ -7778,6 +9084,85 @@ ], "time": "2025-02-19T07:14:53+00:00" }, + { + "name": "spatie/php-structure-discoverer", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/php-structure-discoverer.git", + "reference": "42f4d731d3dd4b3b85732e05a8c1928fcfa2f4bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/42f4d731d3dd4b3b85732e05a8c1928fcfa2f4bc", + "reference": "42f4d731d3dd4b3b85732e05a8c1928fcfa2f4bc", + "shasum": "" + }, + "require": { + "amphp/amp": "^v3.0", + "amphp/parallel": "^2.2", + "illuminate/collections": "^10.0|^11.0|^12.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.4.3", + "symfony/finder": "^6.0|^7.0" + }, + "require-dev": { + "illuminate/console": "^10.0|^11.0|^12.0", + "laravel/pint": "^1.0", + "nunomaduro/collision": "^7.0|^8.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "pestphp/pest": "^2.0|^3.0", + "pestphp/pest-plugin-laravel": "^2.0|^3.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5|^10.0|^11.5.3", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\StructureDiscoverer\\StructureDiscovererServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\StructureDiscoverer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "Automatically discover structures within your PHP application", + "homepage": "https://github.com/spatie/php-structure-discoverer", + "keywords": [ + "discover", + "laravel", + "php", + "php-structure-discoverer" + ], + "support": { + "issues": "https://github.com/spatie/php-structure-discoverer/issues", + "source": "https://github.com/spatie/php-structure-discoverer/tree/2.3.1" + }, + "funding": [ + { + "url": "https://github.com/LaravelAutoDiscoverer", + "type": "github" + } + ], + "time": "2025-02-14T10:18:38+00:00" + }, { "name": "spatie/regex", "version": "3.1.1", @@ -12529,181 +13914,6 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.5 || ~1.6.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" - }, - "time": "2024-12-07T09:39:29+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18|^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" - }, - "time": "2024-11-09T15:12:26+00:00" - }, { "name": "phpmyadmin/sql-parser", "version": "5.11.0",