Created
October 10, 2025 10:33
-
-
Save sasezaki/579be9abfe9aeeb1324b605ba321db44 to your computer and use it in GitHub Desktop.
inline @var must die https://github.com/php-embed/Embed/pull/562
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/src/Adapters/Archive/Detectors/AuthorName.php b/src/Adapters/Archive/Detectors/AuthorName.php | |
| index 3aef8b7..400be60 100644 | |
| --- a/src/Adapters/Archive/Detectors/AuthorName.php | |
| +++ b/src/Adapters/Archive/Detectors/AuthorName.php | |
| @@ -3,14 +3,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Archive\Detectors; | |
| -use Embed\Adapters\Archive\Extractor; | |
| use Embed\Detectors\AuthorName as Detector; | |
| -class AuthorName extends Detector | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Archive\Extractor> | |
| + */ | |
| +final class AuthorName extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Archive/Detectors/Code.php b/src/Adapters/Archive/Detectors/Code.php | |
| index 1840621..33f3a3b 100644 | |
| --- a/src/Adapters/Archive/Detectors/Code.php | |
| +++ b/src/Adapters/Archive/Detectors/Code.php | |
| @@ -8,7 +8,10 @@ use Embed\EmbedCode; | |
| use function Embed\html; | |
| use function Embed\matchPath; | |
| -class Code extends Detector | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Archive\Extractor> | |
| + */ | |
| +final class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| { | |
| diff --git a/src/Adapters/Archive/Detectors/Description.php b/src/Adapters/Archive/Detectors/Description.php | |
| index baffbba..91f5f4e 100644 | |
| --- a/src/Adapters/Archive/Detectors/Description.php | |
| +++ b/src/Adapters/Archive/Detectors/Description.php | |
| @@ -3,14 +3,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Archive\Detectors; | |
| -use Embed\Adapters\Archive\Extractor; | |
| use Embed\Detectors\Description as Detector; | |
| -class Description extends Detector | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Archive\Extractor> | |
| + */ | |
| +final class Description extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Archive/Detectors/ProviderName.php b/src/Adapters/Archive/Detectors/ProviderName.php | |
| index e8a632a..da006b8 100644 | |
| --- a/src/Adapters/Archive/Detectors/ProviderName.php | |
| +++ b/src/Adapters/Archive/Detectors/ProviderName.php | |
| @@ -5,7 +5,10 @@ namespace Embed\Adapters\Archive\Detectors; | |
| use Embed\Detectors\ProviderName as Detector; | |
| -class ProviderName extends Detector | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Archive\Extractor> | |
| + */ | |
| +final class ProviderName extends Detector | |
| { | |
| public function detect(): string | |
| { | |
| diff --git a/src/Adapters/Archive/Detectors/PublishedTime.php b/src/Adapters/Archive/Detectors/PublishedTime.php | |
| index 0d298d9..74149a8 100644 | |
| --- a/src/Adapters/Archive/Detectors/PublishedTime.php | |
| +++ b/src/Adapters/Archive/Detectors/PublishedTime.php | |
| @@ -4,14 +4,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Archive\Detectors; | |
| use DateTime; | |
| -use Embed\Adapters\Archive\Extractor; | |
| use Embed\Detectors\PublishedTime as Detector; | |
| -class PublishedTime extends Detector | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Archive\Extractor> | |
| + */ | |
| +final class PublishedTime extends Detector | |
| { | |
| public function detect(): ?DateTime | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Archive/Detectors/Title.php b/src/Adapters/Archive/Detectors/Title.php | |
| index 328ed05..6511b19 100644 | |
| --- a/src/Adapters/Archive/Detectors/Title.php | |
| +++ b/src/Adapters/Archive/Detectors/Title.php | |
| @@ -3,14 +3,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Archive\Detectors; | |
| -use Embed\Adapters\Archive\Extractor; | |
| use Embed\Detectors\Title as Detector; | |
| -class Title extends Detector | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Archive\Extractor> | |
| + */ | |
| +final class Title extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Archive/Extractor.php b/src/Adapters/Archive/Extractor.php | |
| index ae99596..482e13a 100644 | |
| --- a/src/Adapters/Archive/Extractor.php | |
| +++ b/src/Adapters/Archive/Extractor.php | |
| @@ -9,6 +9,9 @@ use Psr\Http\Message\RequestInterface; | |
| use Psr\Http\Message\ResponseInterface; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| private Api $api; | |
| @@ -28,9 +31,6 @@ class Extractor extends Base | |
| return $this->api; | |
| } | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Bandcamp/Detectors/ProviderName.php b/src/Adapters/Bandcamp/Detectors/ProviderName.php | |
| index 74575ae..a52c98a 100644 | |
| --- a/src/Adapters/Bandcamp/Detectors/ProviderName.php | |
| +++ b/src/Adapters/Bandcamp/Detectors/ProviderName.php | |
| @@ -5,6 +5,9 @@ namespace Embed\Adapters\Bandcamp\Detectors; | |
| use Embed\Detectors\ProviderName as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Bandcamp\Extractor> | |
| + */ | |
| class ProviderName extends Detector | |
| { | |
| public function detect(): string | |
| diff --git a/src/Adapters/Bandcamp/Extractor.php b/src/Adapters/Bandcamp/Extractor.php | |
| index 4375d9c..94e0353 100644 | |
| --- a/src/Adapters/Bandcamp/Extractor.php | |
| +++ b/src/Adapters/Bandcamp/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Bandcamp; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/CadenaSer/Detectors/Code.php b/src/Adapters/CadenaSer/Detectors/Code.php | |
| index 0715ef2..bf70e66 100644 | |
| --- a/src/Adapters/CadenaSer/Detectors/Code.php | |
| +++ b/src/Adapters/CadenaSer/Detectors/Code.php | |
| @@ -9,6 +9,9 @@ use Embed\EmbedCode; | |
| use function Embed\html; | |
| use function Embed\matchPath; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\CadenaSer\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/CadenaSer/Extractor.php b/src/Adapters/CadenaSer/Extractor.php | |
| index 63d1b63..e6d05ef 100644 | |
| --- a/src/Adapters/CadenaSer/Extractor.php | |
| +++ b/src/Adapters/CadenaSer/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\CadenaSer; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Facebook/Detectors/Title.php b/src/Adapters/Facebook/Detectors/Title.php | |
| index 8d05113..298d263 100644 | |
| --- a/src/Adapters/Facebook/Detectors/Title.php | |
| +++ b/src/Adapters/Facebook/Detectors/Title.php | |
| @@ -5,6 +5,9 @@ namespace Embed\Adapters\Facebook\Detectors; | |
| use Embed\Detectors\Title as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Facebook\Extractor> | |
| + */ | |
| class Title extends Detector | |
| { | |
| /** | |
| diff --git a/src/Adapters/Facebook/Extractor.php b/src/Adapters/Facebook/Extractor.php | |
| index 9d24eeb..9b8e4fd 100644 | |
| --- a/src/Adapters/Facebook/Extractor.php | |
| +++ b/src/Adapters/Facebook/Extractor.php | |
| @@ -8,7 +8,7 @@ use Embed\Extractor as Base; | |
| class Extractor extends Base | |
| { | |
| /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| + * @return array{title: Detectors\Title} | |
| */ | |
| public function createCustomDetectors(): array | |
| { | |
| diff --git a/src/Adapters/Flickr/Detectors/Code.php b/src/Adapters/Flickr/Detectors/Code.php | |
| index 273a0d6..9f14eb1 100644 | |
| --- a/src/Adapters/Flickr/Detectors/Code.php | |
| +++ b/src/Adapters/Flickr/Detectors/Code.php | |
| @@ -9,6 +9,9 @@ use Embed\EmbedCode; | |
| use function Embed\html; | |
| use function Embed\matchPath; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Flickr\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/Flickr/Extractor.php b/src/Adapters/Flickr/Extractor.php | |
| index 263b873..0a4369c 100644 | |
| --- a/src/Adapters/Flickr/Extractor.php | |
| +++ b/src/Adapters/Flickr/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Flickr; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Gist/Detectors/AuthorName.php b/src/Adapters/Gist/Detectors/AuthorName.php | |
| index 214910f..2aee6dc 100644 | |
| --- a/src/Adapters/Gist/Detectors/AuthorName.php | |
| +++ b/src/Adapters/Gist/Detectors/AuthorName.php | |
| @@ -3,14 +3,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Gist\Detectors; | |
| -use Embed\Adapters\Gist\Extractor; | |
| use Embed\Detectors\AuthorName as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Gist\Extractor> | |
| + */ | |
| class AuthorName extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Gist/Detectors/AuthorUrl.php b/src/Adapters/Gist/Detectors/AuthorUrl.php | |
| index 0060136..d9bae2a 100644 | |
| --- a/src/Adapters/Gist/Detectors/AuthorUrl.php | |
| +++ b/src/Adapters/Gist/Detectors/AuthorUrl.php | |
| @@ -3,15 +3,16 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Gist\Detectors; | |
| -use Embed\Adapters\Gist\Extractor; | |
| use Embed\Detectors\AuthorUrl as Detector; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Gist\Extractor> | |
| + */ | |
| class AuthorUrl extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| $owner = $api->str('owner'); | |
| diff --git a/src/Adapters/Gist/Detectors/Code.php b/src/Adapters/Gist/Detectors/Code.php | |
| index b7df106..28d510f 100644 | |
| --- a/src/Adapters/Gist/Detectors/Code.php | |
| +++ b/src/Adapters/Gist/Detectors/Code.php | |
| @@ -3,11 +3,13 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Gist\Detectors; | |
| -use Embed\Adapters\Gist\Extractor; | |
| use Embed\Detectors\Code as Detector; | |
| use Embed\EmbedCode; | |
| use function Embed\html; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Gist\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| @@ -18,7 +20,6 @@ class Code extends Detector | |
| private function fallback(): ?EmbedCode | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Gist/Detectors/PublishedTime.php b/src/Adapters/Gist/Detectors/PublishedTime.php | |
| index d49c5da..775b6ce 100644 | |
| --- a/src/Adapters/Gist/Detectors/PublishedTime.php | |
| +++ b/src/Adapters/Gist/Detectors/PublishedTime.php | |
| @@ -4,14 +4,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Gist\Detectors; | |
| use DateTime; | |
| -use Embed\Adapters\Gist\Extractor; | |
| use Embed\Detectors\PublishedTime as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Gist\Extractor> | |
| + */ | |
| class PublishedTime extends Detector | |
| { | |
| public function detect(): ?DateTime | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Gist/Extractor.php b/src/Adapters/Gist/Extractor.php | |
| index 369ad17..088f874 100644 | |
| --- a/src/Adapters/Gist/Extractor.php | |
| +++ b/src/Adapters/Gist/Extractor.php | |
| @@ -9,6 +9,9 @@ use Psr\Http\Message\RequestInterface; | |
| use Psr\Http\Message\ResponseInterface; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| private Api $api; | |
| @@ -28,9 +31,6 @@ class Extractor extends Base | |
| return $this->api; | |
| } | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Github/Detectors/Code.php b/src/Adapters/Github/Detectors/Code.php | |
| index e3adc4d..03cb9a3 100644 | |
| --- a/src/Adapters/Github/Detectors/Code.php | |
| +++ b/src/Adapters/Github/Detectors/Code.php | |
| @@ -8,6 +8,9 @@ use Embed\EmbedCode; | |
| use function Embed\html; | |
| use function Embed\matchPath; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Github\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/Github/Extractor.php b/src/Adapters/Github/Extractor.php | |
| index 1976388..6762be8 100644 | |
| --- a/src/Adapters/Github/Extractor.php | |
| +++ b/src/Adapters/Github/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Github; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Ideone/Detectors/Code.php b/src/Adapters/Ideone/Detectors/Code.php | |
| index e14c027..6459d86 100644 | |
| --- a/src/Adapters/Ideone/Detectors/Code.php | |
| +++ b/src/Adapters/Ideone/Detectors/Code.php | |
| @@ -7,6 +7,9 @@ use Embed\Detectors\Code as Detector; | |
| use Embed\EmbedCode; | |
| use function Embed\html; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Ideone\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/Ideone/Extractor.php b/src/Adapters/Ideone/Extractor.php | |
| index 1581c0a..2dc9116 100644 | |
| --- a/src/Adapters/Ideone/Extractor.php | |
| +++ b/src/Adapters/Ideone/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Ideone; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/ImageShack/Detectors/AuthorName.php b/src/Adapters/ImageShack/Detectors/AuthorName.php | |
| index f77bbbc..8eeed2d 100644 | |
| --- a/src/Adapters/ImageShack/Detectors/AuthorName.php | |
| +++ b/src/Adapters/ImageShack/Detectors/AuthorName.php | |
| @@ -6,11 +6,13 @@ namespace Embed\Adapters\ImageShack\Detectors; | |
| use Embed\Adapters\ImageShack\Extractor; | |
| use Embed\Detectors\AuthorName as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\ImageShack\Extractor> | |
| + */ | |
| class AuthorName extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/ImageShack/Detectors/AuthorUrl.php b/src/Adapters/ImageShack/Detectors/AuthorUrl.php | |
| index 598e319..7fcd0b0 100644 | |
| --- a/src/Adapters/ImageShack/Detectors/AuthorUrl.php | |
| +++ b/src/Adapters/ImageShack/Detectors/AuthorUrl.php | |
| @@ -3,15 +3,16 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\ImageShack\Detectors; | |
| -use Embed\Adapters\ImageShack\Extractor; | |
| use Embed\Detectors\AuthorUrl as Detector; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\ImageShack\Extractor> | |
| + */ | |
| class AuthorUrl extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| $owner = $api->str('owner', 'username'); | |
| diff --git a/src/Adapters/ImageShack/Detectors/Description.php b/src/Adapters/ImageShack/Detectors/Description.php | |
| index ecd7af6..0ebd1df 100644 | |
| --- a/src/Adapters/ImageShack/Detectors/Description.php | |
| +++ b/src/Adapters/ImageShack/Detectors/Description.php | |
| @@ -3,14 +3,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\ImageShack\Detectors; | |
| -use Embed\Adapters\ImageShack\Extractor; | |
| use Embed\Detectors\Description as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\ImageShack\Extractor> | |
| + */ | |
| class Description extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/ImageShack/Detectors/Image.php b/src/Adapters/ImageShack/Detectors/Image.php | |
| index c11e891..531e306 100644 | |
| --- a/src/Adapters/ImageShack/Detectors/Image.php | |
| +++ b/src/Adapters/ImageShack/Detectors/Image.php | |
| @@ -3,15 +3,16 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\ImageShack\Detectors; | |
| -use Embed\Adapters\ImageShack\Extractor; | |
| use Embed\Detectors\Image as Detector; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\ImageShack\Extractor> | |
| + */ | |
| class Image extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/ImageShack/Detectors/ProviderName.php b/src/Adapters/ImageShack/Detectors/ProviderName.php | |
| index 661d45e..fffe0d3 100644 | |
| --- a/src/Adapters/ImageShack/Detectors/ProviderName.php | |
| +++ b/src/Adapters/ImageShack/Detectors/ProviderName.php | |
| @@ -5,6 +5,9 @@ namespace Embed\Adapters\ImageShack\Detectors; | |
| use Embed\Detectors\ProviderName as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\ImageShack\Extractor> | |
| + */ | |
| class ProviderName extends Detector | |
| { | |
| public function detect(): string | |
| diff --git a/src/Adapters/ImageShack/Detectors/PublishedTime.php b/src/Adapters/ImageShack/Detectors/PublishedTime.php | |
| index 8224860..ad1f803 100644 | |
| --- a/src/Adapters/ImageShack/Detectors/PublishedTime.php | |
| +++ b/src/Adapters/ImageShack/Detectors/PublishedTime.php | |
| @@ -7,11 +7,13 @@ use DateTime; | |
| use Embed\Adapters\ImageShack\Extractor; | |
| use Embed\Detectors\PublishedTime as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\ImageShack\Extractor> | |
| + */ | |
| class PublishedTime extends Detector | |
| { | |
| public function detect(): ?DateTime | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/ImageShack/Detectors/Title.php b/src/Adapters/ImageShack/Detectors/Title.php | |
| index 4d74f0c..6f53df5 100644 | |
| --- a/src/Adapters/ImageShack/Detectors/Title.php | |
| +++ b/src/Adapters/ImageShack/Detectors/Title.php | |
| @@ -3,14 +3,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\ImageShack\Detectors; | |
| -use Embed\Adapters\ImageShack\Extractor; | |
| use Embed\Detectors\Title as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\ImageShack\Extractor> | |
| + */ | |
| class Title extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/ImageShack/Extractor.php b/src/Adapters/ImageShack/Extractor.php | |
| index 327bf9b..416228d 100644 | |
| --- a/src/Adapters/ImageShack/Extractor.php | |
| +++ b/src/Adapters/ImageShack/Extractor.php | |
| @@ -9,6 +9,9 @@ use Psr\Http\Message\RequestInterface; | |
| use Psr\Http\Message\ResponseInterface; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| private Api $api; | |
| @@ -28,9 +31,6 @@ class Extractor extends Base | |
| return $this->api; | |
| } | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Instagram/Extractor.php b/src/Adapters/Instagram/Extractor.php | |
| index 8e0e73e..c7a7802 100644 | |
| --- a/src/Adapters/Instagram/Extractor.php | |
| +++ b/src/Adapters/Instagram/Extractor.php | |
| @@ -9,6 +9,9 @@ use Psr\Http\Message\RequestInterface; | |
| use Psr\Http\Message\ResponseInterface; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| public function __construct(UriInterface $uri, RequestInterface $request, ResponseInterface $response, Crawler $crawler) | |
| diff --git a/src/Adapters/Pinterest/Detectors/Code.php b/src/Adapters/Pinterest/Detectors/Code.php | |
| index b033ec7..626975b 100644 | |
| --- a/src/Adapters/Pinterest/Detectors/Code.php | |
| +++ b/src/Adapters/Pinterest/Detectors/Code.php | |
| @@ -8,6 +8,9 @@ use Embed\EmbedCode; | |
| use function Embed\html; | |
| use function Embed\matchPath; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Pinterest\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/Pinterest/Extractor.php b/src/Adapters/Pinterest/Extractor.php | |
| index 39aa79d..5c627aa 100644 | |
| --- a/src/Adapters/Pinterest/Extractor.php | |
| +++ b/src/Adapters/Pinterest/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Pinterest; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Sassmeister/Detectors/Code.php b/src/Adapters/Sassmeister/Detectors/Code.php | |
| index f9b39b6..f421a52 100644 | |
| --- a/src/Adapters/Sassmeister/Detectors/Code.php | |
| +++ b/src/Adapters/Sassmeister/Detectors/Code.php | |
| @@ -8,6 +8,9 @@ use Embed\EmbedCode; | |
| use function Embed\html; | |
| use function Embed\matchPath; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Sassmeister\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/Sassmeister/Extractor.php b/src/Adapters/Sassmeister/Extractor.php | |
| index 718e79e..4e3cde5 100644 | |
| --- a/src/Adapters/Sassmeister/Extractor.php | |
| +++ b/src/Adapters/Sassmeister/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Sassmeister; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Slides/Detectors/Code.php b/src/Adapters/Slides/Detectors/Code.php | |
| index 8e6ffb9..2db4364 100644 | |
| --- a/src/Adapters/Slides/Detectors/Code.php | |
| +++ b/src/Adapters/Slides/Detectors/Code.php | |
| @@ -8,6 +8,9 @@ use Embed\Detectors\Code as Detector; | |
| use Embed\EmbedCode; | |
| use function Embed\html; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Slides\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): EmbedCode | |
| diff --git a/src/Adapters/Slides/Extractor.php b/src/Adapters/Slides/Extractor.php | |
| index 949cc7b..c7d9daa 100644 | |
| --- a/src/Adapters/Slides/Extractor.php | |
| +++ b/src/Adapters/Slides/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Slides; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Snipplr/Detectors/Code.php b/src/Adapters/Snipplr/Detectors/Code.php | |
| index 2663039..a496862 100644 | |
| --- a/src/Adapters/Snipplr/Detectors/Code.php | |
| +++ b/src/Adapters/Snipplr/Detectors/Code.php | |
| @@ -8,6 +8,9 @@ use Embed\EmbedCode; | |
| use function Embed\html; | |
| use function Embed\matchPath; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Snipplr\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/Snipplr/Extractor.php b/src/Adapters/Snipplr/Extractor.php | |
| index 06ab210..fc34955 100644 | |
| --- a/src/Adapters/Snipplr/Extractor.php | |
| +++ b/src/Adapters/Snipplr/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Snipplr; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Twitch/Detectors/Code.php b/src/Adapters/Twitch/Detectors/Code.php | |
| index 2780dc4..b06f39f 100644 | |
| --- a/src/Adapters/Twitch/Detectors/Code.php | |
| +++ b/src/Adapters/Twitch/Detectors/Code.php | |
| @@ -7,6 +7,9 @@ use Embed\Detectors\Code as Detector; | |
| use Embed\EmbedCode; | |
| use function Embed\html; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitch\Extractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Adapters/Twitch/Extractor.php b/src/Adapters/Twitch/Extractor.php | |
| index 990f62b..f54552d 100644 | |
| --- a/src/Adapters/Twitch/Extractor.php | |
| +++ b/src/Adapters/Twitch/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Twitch; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Twitter/Detectors/AuthorName.php b/src/Adapters/Twitter/Detectors/AuthorName.php | |
| index d9c050d..a97d2d4 100644 | |
| --- a/src/Adapters/Twitter/Detectors/AuthorName.php | |
| +++ b/src/Adapters/Twitter/Detectors/AuthorName.php | |
| @@ -6,11 +6,13 @@ namespace Embed\Adapters\Twitter\Detectors; | |
| use Embed\Adapters\Twitter\Extractor; | |
| use Embed\Detectors\AuthorName as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitter\Extractor> | |
| + */ | |
| class AuthorName extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Twitter/Detectors/AuthorUrl.php b/src/Adapters/Twitter/Detectors/AuthorUrl.php | |
| index c30c47d..d2b38b9 100644 | |
| --- a/src/Adapters/Twitter/Detectors/AuthorUrl.php | |
| +++ b/src/Adapters/Twitter/Detectors/AuthorUrl.php | |
| @@ -7,11 +7,13 @@ use Embed\Adapters\Twitter\Extractor; | |
| use Embed\Detectors\AuthorUrl as Detector; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitter\Extractor> | |
| + */ | |
| class AuthorUrl extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| $username = $api->str('includes', 'users', '0', 'username'); | |
| diff --git a/src/Adapters/Twitter/Detectors/Description.php b/src/Adapters/Twitter/Detectors/Description.php | |
| index d61db34..fb01d2a 100644 | |
| --- a/src/Adapters/Twitter/Detectors/Description.php | |
| +++ b/src/Adapters/Twitter/Detectors/Description.php | |
| @@ -6,11 +6,13 @@ namespace Embed\Adapters\Twitter\Detectors; | |
| use Embed\Adapters\Twitter\Extractor; | |
| use Embed\Detectors\Description as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitter\Extractor> | |
| + */ | |
| class Description extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Twitter/Detectors/Image.php b/src/Adapters/Twitter/Detectors/Image.php | |
| index 75fad8e..4e5879e 100644 | |
| --- a/src/Adapters/Twitter/Detectors/Image.php | |
| +++ b/src/Adapters/Twitter/Detectors/Image.php | |
| @@ -7,11 +7,13 @@ use Embed\Adapters\Twitter\Extractor; | |
| use Embed\Detectors\Image as Detector; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitter\Extractor> | |
| + */ | |
| class Image extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| $preview = $api->url('includes', 'media', '0', 'preview_image_url'); | |
| diff --git a/src/Adapters/Twitter/Detectors/ProviderName.php b/src/Adapters/Twitter/Detectors/ProviderName.php | |
| index e5c99c0..93bed7a 100644 | |
| --- a/src/Adapters/Twitter/Detectors/ProviderName.php | |
| +++ b/src/Adapters/Twitter/Detectors/ProviderName.php | |
| @@ -5,6 +5,9 @@ namespace Embed\Adapters\Twitter\Detectors; | |
| use Embed\Detectors\ProviderName as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitter\Extractor> | |
| + */ | |
| class ProviderName extends Detector | |
| { | |
| public function detect(): string | |
| diff --git a/src/Adapters/Twitter/Detectors/PublishedTime.php b/src/Adapters/Twitter/Detectors/PublishedTime.php | |
| index 49cef11..a889738 100644 | |
| --- a/src/Adapters/Twitter/Detectors/PublishedTime.php | |
| +++ b/src/Adapters/Twitter/Detectors/PublishedTime.php | |
| @@ -7,11 +7,13 @@ use DateTime; | |
| use Embed\Adapters\Twitter\Extractor; | |
| use Embed\Detectors\PublishedTime as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitter\Extractor> | |
| + */ | |
| class PublishedTime extends Detector | |
| { | |
| public function detect(): ?DateTime | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Twitter/Detectors/Title.php b/src/Adapters/Twitter/Detectors/Title.php | |
| index 36e8c12..d37231b 100644 | |
| --- a/src/Adapters/Twitter/Detectors/Title.php | |
| +++ b/src/Adapters/Twitter/Detectors/Title.php | |
| @@ -6,11 +6,13 @@ namespace Embed\Adapters\Twitter\Detectors; | |
| use Embed\Adapters\Twitter\Extractor; | |
| use Embed\Detectors\Title as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Twitter\Extractor> | |
| + */ | |
| class Title extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| $name = $api->str('includes', 'users', '0', 'name'); | |
| diff --git a/src/Adapters/Twitter/Extractor.php b/src/Adapters/Twitter/Extractor.php | |
| index 0908b5a..d505e5e 100644 | |
| --- a/src/Adapters/Twitter/Extractor.php | |
| +++ b/src/Adapters/Twitter/Extractor.php | |
| @@ -9,6 +9,9 @@ use Psr\Http\Message\RequestInterface; | |
| use Psr\Http\Message\ResponseInterface; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| private Api $api; | |
| @@ -28,9 +31,6 @@ class Extractor extends Base | |
| return $this->api; | |
| } | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Wikipedia/Detectors/Description.php b/src/Adapters/Wikipedia/Detectors/Description.php | |
| index fdb18dd..102c4d0 100644 | |
| --- a/src/Adapters/Wikipedia/Detectors/Description.php | |
| +++ b/src/Adapters/Wikipedia/Detectors/Description.php | |
| @@ -3,14 +3,15 @@ declare(strict_types = 1); | |
| namespace Embed\Adapters\Wikipedia\Detectors; | |
| -use Embed\Adapters\Wikipedia\Extractor; | |
| use Embed\Detectors\Description as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Wikipedia\Extractor> | |
| + */ | |
| class Description extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Wikipedia/Detectors/Title.php b/src/Adapters/Wikipedia/Detectors/Title.php | |
| index bfe001a..413c587 100644 | |
| --- a/src/Adapters/Wikipedia/Detectors/Title.php | |
| +++ b/src/Adapters/Wikipedia/Detectors/Title.php | |
| @@ -6,11 +6,13 @@ namespace Embed\Adapters\Wikipedia\Detectors; | |
| use Embed\Adapters\Wikipedia\Extractor; | |
| use Embed\Detectors\Title as Detector; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Wikipedia\Extractor> | |
| + */ | |
| class Title extends Detector | |
| { | |
| public function detect(): ?string | |
| { | |
| - /** @var Extractor $extractor */ | |
| $extractor = $this->extractor; | |
| $api = $extractor->getApi(); | |
| diff --git a/src/Adapters/Wikipedia/Extractor.php b/src/Adapters/Wikipedia/Extractor.php | |
| index 75afb5e..c432707 100644 | |
| --- a/src/Adapters/Wikipedia/Extractor.php | |
| +++ b/src/Adapters/Wikipedia/Extractor.php | |
| @@ -9,6 +9,9 @@ use Psr\Http\Message\RequestInterface; | |
| use Psr\Http\Message\ResponseInterface; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| private Api $api; | |
| @@ -28,9 +31,6 @@ class Extractor extends Base | |
| return $this->api; | |
| } | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Adapters/Youtube/Detectors/Feeds.php b/src/Adapters/Youtube/Detectors/Feeds.php | |
| index 0bc9559..b63aeeb 100644 | |
| --- a/src/Adapters/Youtube/Detectors/Feeds.php | |
| +++ b/src/Adapters/Youtube/Detectors/Feeds.php | |
| @@ -8,6 +8,9 @@ use function Embed\getDirectory; | |
| use function Embed\matchPath; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @extends Detector<\Embed\Adapters\Youtube\Extractor> | |
| + */ | |
| class Feeds extends Detector | |
| { | |
| /** | |
| diff --git a/src/Adapters/Youtube/Extractor.php b/src/Adapters/Youtube/Extractor.php | |
| index ea43c12..1b81d63 100644 | |
| --- a/src/Adapters/Youtube/Extractor.php | |
| +++ b/src/Adapters/Youtube/Extractor.php | |
| @@ -5,11 +5,11 @@ namespace Embed\Adapters\Youtube; | |
| use Embed\Extractor as Base; | |
| +/** | |
| + * @template-extends Base<\Embed\Detectors\Detector<self>> | |
| + */ | |
| class Extractor extends Base | |
| { | |
| - /** | |
| - * @return array<string, \Embed\Detectors\Detector> | |
| - */ | |
| public function createCustomDetectors(): array | |
| { | |
| return [ | |
| diff --git a/src/Detectors/AuthorName.php b/src/Detectors/AuthorName.php | |
| index 3d1dc67..a65881f 100644 | |
| --- a/src/Detectors/AuthorName.php | |
| +++ b/src/Detectors/AuthorName.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class AuthorName extends Detector | |
| { | |
| public function detect(): ?string | |
| diff --git a/src/Detectors/AuthorUrl.php b/src/Detectors/AuthorUrl.php | |
| index c11f2af..9903e63 100644 | |
| --- a/src/Detectors/AuthorUrl.php | |
| +++ b/src/Detectors/AuthorUrl.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class AuthorUrl extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| diff --git a/src/Detectors/Cms.php b/src/Detectors/Cms.php | |
| index 027de53..d3df134 100644 | |
| --- a/src/Detectors/Cms.php | |
| +++ b/src/Detectors/Cms.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Cms extends Detector | |
| { | |
| public const BLOGSPOT = 'blogspot'; | |
| diff --git a/src/Detectors/Code.php b/src/Detectors/Code.php | |
| index 883ee85..870c82c 100644 | |
| --- a/src/Detectors/Code.php | |
| +++ b/src/Detectors/Code.php | |
| @@ -6,6 +6,10 @@ namespace Embed\Detectors; | |
| use Embed\EmbedCode; | |
| use function Embed\html; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Code extends Detector | |
| { | |
| public function detect(): ?EmbedCode | |
| diff --git a/src/Detectors/Description.php b/src/Detectors/Description.php | |
| index 0fffdee..cc845af 100644 | |
| --- a/src/Detectors/Description.php | |
| +++ b/src/Detectors/Description.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Description extends Detector | |
| { | |
| public function detect(): ?string | |
| diff --git a/src/Detectors/Detector.php b/src/Detectors/Detector.php | |
| index ca67a7b..036087e 100644 | |
| --- a/src/Detectors/Detector.php | |
| +++ b/src/Detectors/Detector.php | |
| @@ -5,12 +5,19 @@ namespace Embed\Detectors; | |
| use Embed\Extractor; | |
| +/** | |
| + * @template TExtractor of Extractor | |
| + */ | |
| abstract class Detector | |
| { | |
| + /** @var TExtractor */ | |
| protected Extractor $extractor; | |
| /** @var array<string, mixed> */ | |
| private array $cache = []; | |
| + /** | |
| + * @param TExtractor $extractor | |
| + */ | |
| public function __construct(Extractor $extractor) | |
| { | |
| $this->extractor = $extractor; | |
| diff --git a/src/Detectors/Favicon.php b/src/Detectors/Favicon.php | |
| index dbeca1a..2e0b193 100644 | |
| --- a/src/Detectors/Favicon.php | |
| +++ b/src/Detectors/Favicon.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Favicon extends Detector | |
| { | |
| public function detect(): UriInterface | |
| diff --git a/src/Detectors/Feeds.php b/src/Detectors/Feeds.php | |
| index 8660726..b00c205 100644 | |
| --- a/src/Detectors/Feeds.php | |
| +++ b/src/Detectors/Feeds.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Feeds extends Detector | |
| { | |
| /** @var string[] */ | |
| diff --git a/src/Detectors/Icon.php b/src/Detectors/Icon.php | |
| index 29f24d4..eae8147 100644 | |
| --- a/src/Detectors/Icon.php | |
| +++ b/src/Detectors/Icon.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Icon extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| diff --git a/src/Detectors/Image.php b/src/Detectors/Image.php | |
| index d7ffa4f..10c7ae7 100644 | |
| --- a/src/Detectors/Image.php | |
| +++ b/src/Detectors/Image.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Image extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| diff --git a/src/Detectors/Keywords.php b/src/Detectors/Keywords.php | |
| index a4ce5b9..472c9ed 100644 | |
| --- a/src/Detectors/Keywords.php | |
| +++ b/src/Detectors/Keywords.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Keywords extends Detector | |
| { | |
| /** | |
| diff --git a/src/Detectors/Language.php b/src/Detectors/Language.php | |
| index ed667db..b8dd1e4 100644 | |
| --- a/src/Detectors/Language.php | |
| +++ b/src/Detectors/Language.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Language extends Detector | |
| { | |
| public function detect(): ?string | |
| diff --git a/src/Detectors/Languages.php b/src/Detectors/Languages.php | |
| index eb765a6..5f899c1 100644 | |
| --- a/src/Detectors/Languages.php | |
| +++ b/src/Detectors/Languages.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use function Embed\isEmpty; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Languages extends Detector | |
| { | |
| /** | |
| diff --git a/src/Detectors/License.php b/src/Detectors/License.php | |
| index 3c74d29..a9cf26d 100644 | |
| --- a/src/Detectors/License.php | |
| +++ b/src/Detectors/License.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class License extends Detector | |
| { | |
| public function detect(): ?string | |
| diff --git a/src/Detectors/ProviderName.php b/src/Detectors/ProviderName.php | |
| index 4ae7aa8..1340aa7 100644 | |
| --- a/src/Detectors/ProviderName.php | |
| +++ b/src/Detectors/ProviderName.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class ProviderName extends Detector | |
| { | |
| /** @var string[] */ | |
| diff --git a/src/Detectors/ProviderUrl.php b/src/Detectors/ProviderUrl.php | |
| index 7396fd5..9201179 100644 | |
| --- a/src/Detectors/ProviderUrl.php | |
| +++ b/src/Detectors/ProviderUrl.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class ProviderUrl extends Detector | |
| { | |
| public function detect(): UriInterface | |
| diff --git a/src/Detectors/PublishedTime.php b/src/Detectors/PublishedTime.php | |
| index 5b9c097..c6ed932 100644 | |
| --- a/src/Detectors/PublishedTime.php | |
| +++ b/src/Detectors/PublishedTime.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use DateTime; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class PublishedTime extends Detector | |
| { | |
| public function detect(): ?DateTime | |
| diff --git a/src/Detectors/Redirect.php b/src/Detectors/Redirect.php | |
| index 717bcf9..1f18437 100644 | |
| --- a/src/Detectors/Redirect.php | |
| +++ b/src/Detectors/Redirect.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Redirect extends Detector | |
| { | |
| public function detect(): ?UriInterface | |
| diff --git a/src/Detectors/Title.php b/src/Detectors/Title.php | |
| index cda77ba..7f38b00 100644 | |
| --- a/src/Detectors/Title.php | |
| +++ b/src/Detectors/Title.php | |
| @@ -3,6 +3,10 @@ declare(strict_types = 1); | |
| namespace Embed\Detectors; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Title extends Detector | |
| { | |
| public function detect(): ?string | |
| diff --git a/src/Detectors/Url.php b/src/Detectors/Url.php | |
| index 41f5acc..7771eef 100644 | |
| --- a/src/Detectors/Url.php | |
| +++ b/src/Detectors/Url.php | |
| @@ -5,6 +5,10 @@ namespace Embed\Detectors; | |
| use Psr\Http\Message\UriInterface; | |
| +/** | |
| + * @template TExtractor of \Embed\Extractor | |
| + * @template-extends Detector<TExtractor> | |
| + */ | |
| class Url extends Detector | |
| { | |
| public function detect(): UriInterface | |
| diff --git a/src/Extractor.php b/src/Extractor.php | |
| index ac8d6af..641968a 100644 | |
| --- a/src/Extractor.php | |
| +++ b/src/Extractor.php | |
| @@ -53,6 +53,8 @@ use Psr\Http\Message\UriInterface; | |
| * @property UriInterface|null $redirect | |
| * @property string|null $title | |
| * @property UriInterface $url | |
| + * | |
| + * @template TDetector of Detector = Detector | |
| */ | |
| class Extractor | |
| { | |
| @@ -68,27 +70,45 @@ class Extractor | |
| /** @var array<string, mixed> */ | |
| private array $settings = []; | |
| - /** @var array<string, Detectors\Detector> */ | |
| + /** @var array<string, Detectors\Detector<$this>> */ | |
| private array $customDetectors = []; | |
| - | |
| + /** @var AuthorName<$this> */ | |
| protected AuthorName $authorName; | |
| + /** @var AuthorUrl<$this> */ | |
| protected AuthorUrl $authorUrl; | |
| + /** @var Cms<$this> */ | |
| protected Cms $cms; | |
| + /** @var Code<$this> */ | |
| protected Code $code; | |
| + /** @var Description<$this> */ | |
| protected Description $description; | |
| + /** @var Favicon<$this> */ | |
| protected Favicon $favicon; | |
| + /** @var Feeds<$this> */ | |
| protected Feeds $feeds; | |
| + /** @var Icon<$this> */ | |
| protected Icon $icon; | |
| + /** @var Image<$this> */ | |
| protected Image $image; | |
| + /** @var Keywords<$this> */ | |
| protected Keywords $keywords; | |
| + /** @var Language<$this> */ | |
| protected Language $language; | |
| + /** @var Languages<$this> */ | |
| protected Languages $languages; | |
| + /** @var License<$this> */ | |
| protected License $license; | |
| + /** @var ProviderName<$this> */ | |
| protected ProviderName $providerName; | |
| + /** @var ProviderUrl<$this> */ | |
| protected ProviderUrl $providerUrl; | |
| + /** @var PublishedTime<$this> */ | |
| protected PublishedTime $publishedTime; | |
| + /** @var Redirect<$this> */ | |
| protected Redirect $redirect; | |
| + /** @var Title<$this> */ | |
| protected Title $title; | |
| + /** @var Url<$this> */ | |
| protected Url $url; | |
| public function __construct(UriInterface $uri, RequestInterface $request, ResponseInterface $response, Crawler $crawler) | |
| @@ -150,13 +170,16 @@ class Extractor | |
| } | |
| /** | |
| - * @return array<string, Detector> | |
| + * @return array<string, TDetector> | |
| */ | |
| public function createCustomDetectors(): array | |
| { | |
| return []; | |
| } | |
| + /** | |
| + * @phpstan-param Detector<$this> $detector | |
| + */ | |
| public function addDetector(string $name, Detector $detector): void | |
| { | |
| $this->customDetectors[$name] = $detector; | |
| diff --git a/src/ExtractorFactory.php b/src/ExtractorFactory.php | |
| index f93c60a..dc43daa 100644 | |
| --- a/src/ExtractorFactory.php | |
| +++ b/src/ExtractorFactory.php | |
| @@ -10,6 +10,7 @@ use Psr\Http\Message\UriInterface; | |
| class ExtractorFactory | |
| { | |
| + /** @var class-string<Extractor> */ | |
| private string $default = Extractor::class; | |
| /** @var array<string, class-string<Extractor>> */ | |
| private array $adapters = [ | |
| @@ -33,7 +34,7 @@ class ExtractorFactory | |
| 'twitter.com' => Adapters\Twitter\Extractor::class, | |
| 'x.com' => Adapters\Twitter\Extractor::class, | |
| ]; | |
| - /** @var array<string, class-string<Detectors\Detector>> */ | |
| + /** @var array<string, class-string<Detectors\Detector<Extractor>>> */ | |
| private array $customDetectors = []; | |
| /** @var array<string, mixed> */ | |
| private array $settings; | |
| @@ -65,12 +66,10 @@ class ExtractorFactory | |
| } | |
| } | |
| - /** @var Extractor $extractor */ | |
| $extractor = new $class($uri, $request, $response, $crawler); | |
| $extractor->setSettings($this->settings); | |
| foreach ($this->customDetectors as $name => $detectorClass) { | |
| - /** @var Detectors\Detector */ | |
| $detector = new $detectorClass($extractor); | |
| $extractor->addDetector($name, $detector); | |
| } | |
| @@ -91,7 +90,7 @@ class ExtractorFactory | |
| } | |
| /** | |
| - * @param class-string<Detectors\Detector> $class | |
| + * @param class-string<Detectors\Detector<Extractor>> $class | |
| */ | |
| public function addDetector(string $name, string $class): void | |
| { | |
| @@ -103,6 +102,9 @@ class ExtractorFactory | |
| unset($this->adapters[$pattern]); | |
| } | |
| + /** | |
| + * @param class-string<Extractor> $class | |
| + */ | |
| public function setDefault(string $class): void | |
| { | |
| $this->default = $class; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment