You are here

class LibraryDependencyResolver in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php \Drupal\Core\Asset\LibraryDependencyResolver

Resolves the dependencies of asset (CSS/JavaScript) libraries.

Hierarchy

Expanded class hierarchy of LibraryDependencyResolver

1 file declares its use of LibraryDependencyResolver
LibraryDependencyResolverTest.php in core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php
1 string reference to 'LibraryDependencyResolver'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses LibraryDependencyResolver
library.dependency_resolver in core/core.services.yml
Drupal\Core\Asset\LibraryDependencyResolver

File

core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php, line 8

Namespace

Drupal\Core\Asset
View source
class LibraryDependencyResolver implements LibraryDependencyResolverInterface {

  /**
   * The library discovery service.
   *
   * @var \Drupal\Core\Asset\LibraryDiscoveryInterface
   */
  protected $libraryDiscovery;

  /**
   * Constructs a new LibraryDependencyResolver instance.
   *
   * @param \Drupal\Core\Asset\LibraryDiscoveryInterface $library_discovery
   *   The library discovery service.
   */
  public function __construct(LibraryDiscoveryInterface $library_discovery) {
    $this->libraryDiscovery = $library_discovery;
  }

  /**
   * {@inheritdoc}
   */
  public function getLibrariesWithDependencies(array $libraries) {
    return $this
      ->doGetDependencies($libraries);
  }

  /**
   * Gets the given libraries with its dependencies.
   *
   * Helper method for ::getLibrariesWithDependencies().
   *
   * @param string[] $libraries_with_unresolved_dependencies
   *   A list of libraries, with unresolved dependencies, in the order they
   *   should be loaded.
   * @param string[] $final_libraries
   *   The final list of libraries (the return value) that is being built
   *   recursively.
   *
   * @return string[]
   *   A list of libraries, in the order they should be loaded, including their
   *   dependencies.
   */
  protected function doGetDependencies(array $libraries_with_unresolved_dependencies, array $final_libraries = []) {
    foreach ($libraries_with_unresolved_dependencies as $library) {
      if (!in_array($library, $final_libraries)) {
        list($extension, $name) = explode('/', $library, 2);
        $definition = $this->libraryDiscovery
          ->getLibraryByName($extension, $name);
        if (!empty($definition['dependencies'])) {
          $final_libraries = $this
            ->doGetDependencies($definition['dependencies'], $final_libraries);
        }
        $final_libraries[] = $library;
      }
    }
    return $final_libraries;
  }

  /**
   * {@inheritdoc}
   */
  public function getMinimalRepresentativeSubset(array $libraries) {
    assert(count($libraries) === count(array_unique($libraries)), '$libraries can\'t contain duplicate items.');
    $minimal = [];

    // Determine each library's dependencies.
    $with_deps = [];
    foreach ($libraries as $library) {
      $with_deps[$library] = $this
        ->getLibrariesWithDependencies([
        $library,
      ]);
    }
    foreach ($libraries as $library) {
      $exists = FALSE;
      foreach ($with_deps as $other_library => $dependencies) {
        if ($library == $other_library) {
          continue;
        }
        if (in_array($library, $dependencies)) {
          $exists = TRUE;
          break;
        }
      }
      if (!$exists) {
        $minimal[] = $library;
      }
    }
    return $minimal;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
LibraryDependencyResolver::$libraryDiscovery protected property The library discovery service.
LibraryDependencyResolver::doGetDependencies protected function Gets the given libraries with its dependencies.
LibraryDependencyResolver::getLibrariesWithDependencies public function Gets the given libraries with their dependencies. Overrides LibraryDependencyResolverInterface::getLibrariesWithDependencies
LibraryDependencyResolver::getMinimalRepresentativeSubset public function Gets the minimal representative subset of the given libraries. Overrides LibraryDependencyResolverInterface::getMinimalRepresentativeSubset
LibraryDependencyResolver::__construct public function Constructs a new LibraryDependencyResolver instance.