3 namespace Drupal\libraries\ExternalLibrary\Definition;
5 use Drupal\Component\Serialization\SerializationInterface;
6 use Drupal\Core\Config\ConfigFactoryInterface;
7 use GuzzleHttp\ClientInterface;
10 * Instantiates a library definition discovery based on configuration.
12 class DefinitionDiscoveryFactory {
15 * The configuration factory.
17 * @var \Drupal\Core\Config\ConfigFactoryInterface
19 protected $configFactory;
22 * The serializer for local definition files.
24 * @var \Drupal\Component\Serialization\SerializationInterface
26 protected $localSerializer;
29 * The HTTP client used to fetch remote definitions.
31 * @var \GuzzleHttp\ClientInterface
33 protected $httpClient;
36 * The serializer for remote definitions.
38 * @var \Drupal\Component\Serialization\SerializationInterface
40 protected $remoteSerializer;
43 * Constructs a definition discovery factory.
45 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
46 * The configuration factory.
47 * @param \Drupal\Component\Serialization\SerializationInterface $local_serializer
48 * The serializer for local definition files.
49 * @param \GuzzleHttp\ClientInterface $http_client
50 * The HTTP client used to fetch remote definitions.
51 * @param \Drupal\Component\Serialization\SerializationInterface $remote_serializer
52 * The serializer for remote definitions.
54 public function __construct(
55 ConfigFactoryInterface $config_factory,
56 SerializationInterface $local_serializer,
57 ClientInterface $http_client,
58 SerializationInterface $remote_serializer
60 $this->configFactory = $config_factory;
61 $this->localSerializer = $local_serializer;
62 $this->httpClient = $http_client;
63 $this->remoteSerializer = $remote_serializer;
67 * Gets a library definition discovery.
69 * @return \Drupal\libraries\ExternalLibrary\Definition\DefinitionDiscoveryInterface
70 * The library definition discovery.
72 public function get() {
73 $config = $this->configFactory->get('libraries.settings');
75 if ($config->get('definition.remote.enable')) {
76 $discovery = new ChainDefinitionDiscovery();
78 $local_discovery = new WritableFileDefinitionDiscovery(
79 $this->localSerializer,
80 $config->get('definition.local.path')
82 $discovery->addDiscovery($local_discovery);
84 foreach ($config->get('definition.remote.urls') as $remote_url) {
85 $remote_discovery = new GuzzleDefinitionDiscovery(
87 $this->remoteSerializer,
91 $discovery->addDiscovery($remote_discovery);
95 $discovery = new FileDefinitionDiscovery(
96 $this->localSerializer,
97 $config->get('definition.local.path')