diff --git a/core/lib/Drupal/Core/Asset/Exception/InvalidLibraryDefinitionException.php b/core/lib/Drupal/Core/Asset/Exception/InvalidLibraryDefinitionException.php new file mode 100644 index 0000000..9f89e21 --- /dev/null +++ b/core/lib/Drupal/Core/Asset/Exception/InvalidLibraryDefinitionException.php @@ -0,0 +1,15 @@ +getLibraryByName($new_extension, $new_name); + if ($override = $extension[$name]['override']) { + list($new_extension, $new_name) = explode('/', $override); + if ($library = $this->getLibraryByName($new_extension, $new_name)) { + $extension[$name] = $this->getLibraryByName($new_extension, $new_name); + } + else { + throw new InvalidLibraryDefinitionException(sprintf('The specified library %s does not exist.', $override)); + } } else { unset($extension[$name]); diff --git a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php index b861ec6..1670f16 100644 --- a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php +++ b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php @@ -8,6 +8,7 @@ namespace Drupal\Core\Asset; use Drupal\Core\Asset\Exception\IncompleteLibraryDefinitionException; +use Drupal\Core\Asset\Exception\InvalidLibraryDefinitionException; use Drupal\Core\Asset\Exception\InvalidLibraryFileException; use Drupal\Core\Asset\Exception\LibraryDefinitionMissingLicenseException; use Drupal\Core\Extension\ModuleHandlerInterface; @@ -335,10 +336,11 @@ protected function parseLibraryInfo($extension, $path) { protected function applyLibrariesOverride($libraries, $extension) { $active_theme = $this->themeManager->getActiveTheme(); $libraries_overrides = $active_theme->getLibrariesOverride(); - $theme_path = $active_theme->getPath(); foreach ($libraries as $name => $library) { // Process libraries overrides. foreach ($libraries_overrides as $asset => $override) { + // Flag to determine whether this library override was processed. + $processed = FALSE; // Active theme defines an override for this library. if ($asset === "$extension/$name") { // Active theme defines an override for the whole library. Use the @@ -351,6 +353,7 @@ protected function applyLibrariesOverride($libraries, $extension) { else { $libraries[$name]['override'] = FALSE; } + $processed = TRUE; } elseif (strpos($asset, "$extension/$name/") !== FALSE) { // Active theme defines an override for an asset within this library. @@ -380,6 +383,12 @@ protected function applyLibrariesOverride($libraries, $extension) { // Replace with an override if specified. NestedArray::setValue($libraries[$name], $new_parents, $attributes); } + $processed = TRUE; + } + // If the $processed flag is false, then it means the library + // specification on the left-hand side does not exist. + if (!$processed) { + throw new InvalidLibraryDefinitionException(sprintf('Library or library asset %s does not exist.', $asset)); } } }