1212use Http \Client \Common \HttpMethodsClient ;
1313use Http \Client \Common \Plugin ;
1414use Http \Client \Common \PluginClient ;
15- use Http \Discovery \HttpClientDiscovery ;
16- use Http \Discovery \MessageFactoryDiscovery ;
15+ use Http \Discovery \Psr17FactoryDiscovery ;
16+ use Http \Discovery \Psr18ClientDiscovery ;
1717use Http \Message \RequestFactory ;
1818use Psr \Http \Client \ClientInterface ;
19+ use Psr \Http \Message \RequestFactoryInterface ;
20+ use Psr \Http \Message \StreamFactoryInterface ;
1921
2022class HttpPluginClientBuilder
2123{
2224 /** @var ClientInterface */
2325 private $ httpClient ;
2426 /** @var HttpMethodsClient|null */
2527 private $ pluginClient ;
26- /** @var RequestFactory */
28+ /** @var RequestFactory|RequestFactoryInterface */
2729 private $ requestFactory ;
30+ /** @var StreamFactoryInterface */
31+ private $ streamFactory ;
2832 /** @var Plugin[] */
2933 private $ plugins = [];
3034
31- public function __construct (ClientInterface $ httpClient = null , RequestFactory $ requestFactory = null )
32- {
33- $ this ->httpClient = $ httpClient ?: HttpClientDiscovery::find ();
34- $ this ->requestFactory = $ requestFactory ?: MessageFactoryDiscovery::find ();
35+ /**
36+ * @param RequestFactory|RequestFactoryInterface|null $requestFactory
37+ * @param StreamFactoryInterface|null $streamFactory
38+ */
39+ public function __construct (
40+ ?ClientInterface $ httpClient = null ,
41+ $ requestFactory = null ,
42+ ?StreamFactoryInterface $ streamFactory = null
43+ ) {
44+ $ requestFactory = $ requestFactory ?? Psr17FactoryDiscovery::findRequestFactory ();
45+ if ($ requestFactory instanceof RequestFactory) {
46+ // Use same format as symfony/deprecation-contracts.
47+ @trigger_error (sprintf (
48+ 'Since %s %s: %s is deprecated, use %s instead. ' ,
49+ 'private-packagist/api-client ' ,
50+ '1.36.0 ' ,
51+ RequestFactory::class,
52+ RequestFactoryInterface::class
53+ ), \E_USER_DEPRECATED );
54+ } elseif (!$ requestFactory instanceof RequestFactoryInterface) {
55+ /** @var mixed $requestFactory value unknown; set to mixed, prevent PHPStan complaining about guard clauses */
56+ throw new \TypeError (sprintf (
57+ '%s::__construct(): Argument #2 ($requestFactory) must be of type %s|%s, %s given ' ,
58+ self ::class,
59+ RequestFactory::class,
60+ RequestFactoryInterface::class,
61+ is_object ($ requestFactory ) ? get_class ($ requestFactory ) : gettype ($ requestFactory )
62+ ));
63+ }
64+
65+ $ this ->httpClient = $ httpClient ?? Psr18ClientDiscovery::find ();
66+ $ this ->requestFactory = $ requestFactory ;
67+ $ this ->streamFactory = $ streamFactory ?? Psr17FactoryDiscovery::findStreamFactory ();
3568 }
3669
3770 public function addPlugin (Plugin $ plugin )
@@ -41,7 +74,7 @@ public function addPlugin(Plugin $plugin)
4174 }
4275
4376 /**
44- * @param string $pluginClass
77+ * @param class- string $pluginClass
4578 */
4679 public function removePlugin ($ pluginClass )
4780 {
@@ -58,7 +91,8 @@ public function getHttpClient()
5891 if (!$ this ->pluginClient ) {
5992 $ this ->pluginClient = new HttpMethodsClient (
6093 new PluginClient ($ this ->httpClient , $ this ->plugins ),
61- $ this ->requestFactory
94+ $ this ->requestFactory ,
95+ $ this ->streamFactory
6296 );
6397 }
6498
0 commit comments