Mercurial > hg > isophonics-drupal-site
view core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php @ 19:fa3358dc1485 tip
Add ndrum files
author | Chris Cannam |
---|---|
date | Wed, 28 Aug 2019 13:14:47 +0100 |
parents | 129ea1e6d783 |
children |
line wrap: on
line source
<?php namespace Drupal\Core\Asset; /** * Resolves the dependencies of asset (CSS/JavaScript) libraries. */ 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; } }