From 728388b47364ecfe929f4348f0d72cbfc063c577 Mon Sep 17 00:00:00 2001 From: Ismo Vuorinen Date: Tue, 24 Feb 2026 21:36:21 +0200 Subject: [PATCH] refactor(dto): replace spatie/data-transfer-object with plain readonly class (#46) The spatie/data-transfer-object package is abandoned. Replace it with a native PHP 8.4 final readonly class using a static factory method, removing the dependency entirely. --- app/Commands/CheckCommand.php | 2 +- app/Dto/PackagistApiPackagePayload.php | 44 ++++++++++------- composer.json | 3 +- composer.lock | 66 +------------------------- 4 files changed, 30 insertions(+), 85 deletions(-) diff --git a/app/Commands/CheckCommand.php b/app/Commands/CheckCommand.php index e18cb69..00e6a42 100644 --- a/app/Commands/CheckCommand.php +++ b/app/Commands/CheckCommand.php @@ -48,7 +48,7 @@ class CheckCommand extends Command $this->filter = now()->subMonths($months)->day(1)->toDateString(); try { - $pkg = new PackagistApiPackagePayload($payload->json()); + $pkg = PackagistApiPackagePayload::fromResponse($payload->json()); $this->info('Found the package. Type: ' . $pkg->type); $versions = collect($pkg->versions ?? []) diff --git a/app/Dto/PackagistApiPackagePayload.php b/app/Dto/PackagistApiPackagePayload.php index 70c7262..90e15b7 100644 --- a/app/Dto/PackagistApiPackagePayload.php +++ b/app/Dto/PackagistApiPackagePayload.php @@ -2,22 +2,32 @@ namespace App\Dto; -use Spatie\DataTransferObject\Attributes\MapFrom; - -class PackagistApiPackagePayload extends \Spatie\DataTransferObject\DataTransferObject +final readonly class PackagistApiPackagePayload { - #[MapFrom('package.name')] - public string $name = ''; - #[MapFrom('package.description')] - public string $description = ''; - #[MapFrom('package.time')] - public string $time = ''; - #[MapFrom('package.versions')] - public array $versions = []; - #[MapFrom('package.type')] - public string $type = ''; - #[MapFrom('package.repository')] - public string $repository = ''; - #[MapFrom('package.language')] - public string $language = ''; + public function __construct( + public string $name = '', + public string $description = '', + public string $time = '', + public array $versions = [], + public string $type = '', + public string $repository = '', + public string $language = '', + ) { + } + + /** Create from the raw Packagist API response array. */ + public static function fromResponse(array $data): self + { + $pkg = $data['package'] ?? []; + + return new self( + name: $pkg['name'] ?? '', + description: $pkg['description'] ?? '', + time: $pkg['time'] ?? '', + versions: $pkg['versions'] ?? [], + type: $pkg['type'] ?? '', + repository: $pkg['repository'] ?? '', + language: $pkg['language'] ?? '', + ); + } } diff --git a/composer.json b/composer.json index 1b65289..4e01703 100644 --- a/composer.json +++ b/composer.json @@ -23,8 +23,7 @@ }, "require": { "php": "^8.4", - "illuminate/http": "^12.17", - "spatie/data-transfer-object": "^3.7" + "illuminate/http": "^12.17" }, "require-dev": { "captainhook/captainhook": "^5.28", diff --git a/composer.lock b/composer.lock index bfce359..d1a0c41 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": "cf1f39464e98b53a5308da63ab9b7094", + "content-hash": "6c9155fc6750802789535349ae73a391", "packages": [ { "name": "carbonphp/carbon-doctrine-types", @@ -1725,70 +1725,6 @@ }, "time": "2019-03-08T08:55:37+00:00" }, - { - "name": "spatie/data-transfer-object", - "version": "3.9.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/data-transfer-object.git", - "reference": "1df0906c4e9e3aebd6c0506fd82c8b7d5548c1c8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/data-transfer-object/zipball/1df0906c4e9e3aebd6c0506fd82c8b7d5548c1c8", - "reference": "1df0906c4e9e3aebd6c0506fd82c8b7d5548c1c8", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "illuminate/collections": "^8.36", - "jetbrains/phpstorm-attributes": "^1.0", - "larapack/dd": "^1.1", - "phpunit/phpunit": "^9.5.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\DataTransferObject\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brent Roose", - "email": "brent@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Data transfer objects with batteries included", - "homepage": "https://github.com/spatie/data-transfer-object", - "keywords": [ - "data-transfer-object", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/data-transfer-object/issues", - "source": "https://github.com/spatie/data-transfer-object/tree/3.9.1" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "abandoned": "spatie/laravel-data", - "time": "2022-09-16T13:34:38+00:00" - }, { "name": "symfony/clock", "version": "v8.0.0",