Chris@0: libraryDiscovery = $library_discovery; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getLibrariesWithDependencies(array $libraries) { Chris@0: return $this->doGetDependencies($libraries); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the given libraries with its dependencies. Chris@0: * Chris@0: * Helper method for ::getLibrariesWithDependencies(). Chris@0: * Chris@0: * @param string[] $libraries_with_unresolved_dependencies Chris@0: * A list of libraries, with unresolved dependencies, in the order they Chris@0: * should be loaded. Chris@0: * @param string[] $final_libraries Chris@0: * The final list of libraries (the return value) that is being built Chris@0: * recursively. Chris@0: * Chris@0: * @return string[] Chris@0: * A list of libraries, in the order they should be loaded, including their Chris@0: * dependencies. Chris@0: */ Chris@0: protected function doGetDependencies(array $libraries_with_unresolved_dependencies, array $final_libraries = []) { Chris@0: foreach ($libraries_with_unresolved_dependencies as $library) { Chris@0: if (!in_array($library, $final_libraries)) { Chris@0: list($extension, $name) = explode('/', $library, 2); Chris@0: $definition = $this->libraryDiscovery->getLibraryByName($extension, $name); Chris@0: if (!empty($definition['dependencies'])) { Chris@0: $final_libraries = $this->doGetDependencies($definition['dependencies'], $final_libraries); Chris@0: } Chris@0: $final_libraries[] = $library; Chris@0: } Chris@0: } Chris@0: return $final_libraries; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getMinimalRepresentativeSubset(array $libraries) { Chris@17: assert(count($libraries) === count(array_unique($libraries)), '$libraries can\'t contain duplicate items.'); Chris@17: Chris@0: $minimal = []; Chris@0: Chris@0: // Determine each library's dependencies. Chris@0: $with_deps = []; Chris@0: foreach ($libraries as $library) { Chris@0: $with_deps[$library] = $this->getLibrariesWithDependencies([$library]); Chris@0: } Chris@0: Chris@0: foreach ($libraries as $library) { Chris@0: $exists = FALSE; Chris@0: foreach ($with_deps as $other_library => $dependencies) { Chris@0: if ($library == $other_library) { Chris@0: continue; Chris@0: } Chris@0: if (in_array($library, $dependencies)) { Chris@0: $exists = TRUE; Chris@0: break; Chris@0: } Chris@0: } Chris@0: if (!$exists) { Chris@0: $minimal[] = $library; Chris@0: } Chris@0: } Chris@0: Chris@0: return $minimal; Chris@0: } Chris@0: Chris@0: }