$keywords * @property list $hooks * @property ?Settings $settings */ class Manifest extends ManifestObject { /** * @var array */ protected const VALIDATION_RULES = [ 'name' => 'required|max_length[32]', 'version' => 'required|regex_match[/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/]', 'description' => 'permit_empty|max_length[128]', 'author' => 'permit_empty', 'authors' => 'permit_empty|is_list', 'homepage' => 'permit_empty|valid_url_strict', 'license' => 'permit_empty|string', 'private' => 'permit_empty|is_boolean', 'keywords.*' => 'permit_empty', 'hooks.*' => 'permit_empty|in_list[channelTag,itemTag,siteHead]', 'settings' => 'permit_empty', ]; /** * @var array */ protected const CASTS = [ 'author' => Author::class, 'authors' => [Author::class], 'homepage' => URI::class, 'settings' => Settings::class, ]; protected string $name; protected string $version; protected ?string $description = null; protected ?Author $author = null; /** * @var Author[] */ protected array $authors = []; protected ?URI $homepage = null; protected ?string $license = null; protected bool $private = false; /** * @var list */ protected array $keywords = []; /** * @var list */ protected array $hooks = []; protected ?Settings $settings = null; }