12
12
use Http \Client \Common \HttpMethodsClient ;
13
13
use Http \Client \Common \Plugin ;
14
14
use Http \Client \Common \PluginClient ;
15
- use Http \Discovery \HttpClientDiscovery ;
16
- use Http \Discovery \MessageFactoryDiscovery ;
15
+ use Http \Discovery \Psr17FactoryDiscovery ;
16
+ use Http \Discovery \Psr18ClientDiscovery ;
17
17
use Http \Message \RequestFactory ;
18
18
use Psr \Http \Client \ClientInterface ;
19
+ use Psr \Http \Message \RequestFactoryInterface ;
20
+ use Psr \Http \Message \StreamFactoryInterface ;
19
21
20
22
class HttpPluginClientBuilder
21
23
{
22
24
/** @var ClientInterface */
23
25
private $ httpClient ;
24
26
/** @var HttpMethodsClient|null */
25
27
private $ pluginClient ;
26
- /** @var RequestFactory */
28
+ /** @var RequestFactory|RequestFactoryInterface */
27
29
private $ requestFactory ;
30
+ /** @var StreamFactoryInterface */
31
+ private $ streamFactory ;
28
32
/** @var Plugin[] */
29
33
private $ plugins = [];
30
34
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 ();
35
68
}
36
69
37
70
public function addPlugin (Plugin $ plugin )
@@ -41,7 +74,7 @@ public function addPlugin(Plugin $plugin)
41
74
}
42
75
43
76
/**
44
- * @param string $pluginClass
77
+ * @param class- string $pluginClass
45
78
*/
46
79
public function removePlugin ($ pluginClass )
47
80
{
@@ -58,7 +91,8 @@ public function getHttpClient()
58
91
if (!$ this ->pluginClient ) {
59
92
$ this ->pluginClient = new HttpMethodsClient (
60
93
new PluginClient ($ this ->httpClient , $ this ->plugins ),
61
- $ this ->requestFactory
94
+ $ this ->requestFactory ,
95
+ $ this ->streamFactory
62
96
);
63
97
}
64
98
0 commit comments