feat(commands): describe catalog rows per component with package fallback

This commit is contained in:
kj
2026-10-05 18:10:30 -03:00
parent 40d853b2b0
commit 90e800ba1f
6 changed files with 83 additions and 10 deletions
@@ -31,7 +31,7 @@ final class CatalogCommand extends Command
$first ? $package->name . ' (' . $package->version . ')' : '',
$name,
$installed,
$first ? $package->description : '',
$package->descriptionOf($name) ?? '',
];
$first = false;
}
@@ -15,6 +15,7 @@ final class Component
public readonly array $requires = [],
public readonly ?string $coreRequires = null,
public readonly ?string $coreTested = null,
public readonly ?string $description = null,
public readonly ?array $destinations = null,
public readonly bool $override = false,
) {
@@ -51,12 +52,22 @@ final class Component
}
}
$description = null;
if (isset($data['description'])) {
if (!is_string($data['description'])) {
throw new ToolboxException("El componente '{$name}' tiene un 'description' inválido");
}
$description = $data['description'];
}
return new self(
name: $name,
files: array_values($data['files']),
requires: $requires,
coreRequires: $data['core']['requires'] ?? null,
coreTested: $data['core']['tested'] ?? null,
description: $description,
destinations: $destinations,
override: (bool) ($data['override'] ?? false),
);
@@ -157,4 +157,17 @@ final class Manifest
return $this->coreTested;
}
/**
* Descripcion efectiva: la propia del componente o, en su ausencia, la del
* paquete (mismo patrón de herencia que los rangos de core).
*/
public function descriptionOf(?string $component = null): ?string
{
if ($component !== null) {
return $this->component($component)->description ?? $this->description;
}
return $this->description;
}
}