Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ca43703
task: #3569118 Deprecate the Shortcut module
Aug 21, 2026
e326830
task: #3614955 Move library overrides for Toolbar from Claro and Defa…
Aug 21, 2026
a748fd6
task: #3614983 Move help text explaining how to enable help search in…
Aug 21, 2026
668d8be
fix: #3614911 JS aggregation returns 400 for libraries loaded in the …
Aug 21, 2026
5683959
task: #3396536 [random test failure] Re-enable AjaxTest::testAjaxFocus()
Aug 22, 2026
72e3f2f
fix: #3536795 "Only file JavaScript/CSS assets can be optimized" erro…
Aug 23, 2026
56283a6
task: #3615122 Move test modules to 'Testing' package
Aug 23, 2026
e5a59ea
task: #3612249 Split update script missing extension test to its own …
Aug 23, 2026
e31610e
task: #2850635 Merge \Drupal\Tests\Core\Common\AttributesTest and \Dr…
Aug 24, 2026
cd45946
task: #3616277 Deprecate several locale functions
Aug 24, 2026
bc5de9c
task: #3586214 Remove the Shortcut module
Aug 24, 2026
f6d327d
task: #3593789 Extend RouteSubscriberBase to define as well as alter …
Aug 24, 2026
679a758
task: #3262935 Link field validation constraints don't give enough de…
Aug 24, 2026
03e37d3
task: #3618385 Remove container.trait service definition
Aug 24, 2026
7670ba1
task: #3618672 Move tests to deprecate Search
Aug 25, 2026
b4fabdb
task: #3614949 Move tests to Olivero, part 1
Aug 25, 2026
26106a2
fix: #3618601 default_admin overrides the deprecated node/form asset …
Aug 25, 2026
308cba9
task: #3590882 Standard profile should not include Olivero anymore, s…
Aug 25, 2026
1e05235
task: #3593792 Convert system_test routes to attributes
Aug 25, 2026
11e9488
task: #345747 Show all DB Connections on Status Page
Aug 25, 2026
8f7a0cb
feat: #2871354 Improve "allowed_html" to provide a better config diff
Aug 25, 2026
ee7c7d2
task: #3303751 Reduce the number of times UpdateRegistry scans for ex…
Aug 25, 2026
460789d
task: #3577900 Require plugin managers that support annotation discov…
Aug 25, 2026
b1d1929
task: #3610009 Stop discovery of hooks in include files
Aug 25, 2026
5341dd8
task: #3067979 Exclude test files from release packages
Aug 25, 2026
47961ef
fix: #3563677 Twig debug can influence rendering visually due to whit…
Aug 25, 2026
1a26596
task: #3519393 Convert functional tests in navigation module to kerne…
Aug 25, 2026
f7a91c8
task: #3618737 Promote griffynh to non-provisional committer facilitator
Aug 25, 2026
34b130b
Revert "task: #3067979 Exclude test files from release packages"
Aug 25, 2026
15fda93
fix: #3303751 (follow-up) Reduce the number of times UpdateRegistry s…
alexpott Aug 25, 2026
1f8d954
task: #3615997 Split ::testModuleEnableOrder out of DependencyTest
Aug 25, 2026
761e033
task: #3615567 Split ComposerPluginsValidatorSimpleInvalidTest
Aug 25, 2026
6a4608b
task: #3614401 Allow install profiles to opt out of being installed
Aug 25, 2026
14c70c9
task: #3618432 Performance tests: Move expected metrics and queries t…
Aug 25, 2026
6a9373d
task: #3614825 Allow additional modules to be installed alongside the…
Aug 25, 2026
55c151b
task: #3616275 Use the PECL YAML parser for info file parsing when av…
Aug 25, 2026
cf54347
task: #3568491 Remove IE comment from FormBuilder
Aug 25, 2026
924d508
task: #3614219 Add warning about DDOS to Htmx::trigger()
Aug 25, 2026
7156a08
fix: #3617563 HelpTest docs say it's working with the anonymous user,…
Aug 25, 2026
510a7a2
task: #3614518 Remove unnecessary requests and consolidate test metho…
Aug 25, 2026
0257916
task: #3615455 Install database driver modules alongside other modules
Aug 25, 2026
c9d32c9
Issue #3615336: skip missing locale projects in LocaleSource.
Aug 26, 2026
d6ae463
task: #3618772 Move toolbar_alter hook implementations to the toolbar…
Aug 26, 2026
f31a5d8
task: #3534109 Permanently maintain a sandbox directory in package_ma…
Aug 26, 2026
0f11b01
Finish locale import when project is missing
Aug 26, 2026
bf74760
Merge remote-tracking branch 'origin/main' into review-3615336
Aug 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions core/.cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
"modules/system/tests/logo.svgz",
"node_modules/*",
"profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/**/*",
"profiles/**/tests/**/*Assertions/*",
"modules/**/tests/**/*Assertions/*",
"tests/fixtures/config_install/*",
"tests/fixtures/files/*",
"tests/fixtures/phpunit_*.xml",
Expand Down
2 changes: 1 addition & 1 deletion core/.deprecation-ignore.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

# Cross-module return type deprecations within Drupal core. Downstream
# implementations should add return types first, then we can remove this.
%Method "Drupal\\[^"]+::[^"]+\(\)" might add "[^"]+" as a native return type declaration in the future. Do the same in (?:implementation|child class) "Drupal\\(Core|basic_auth|big_pipe|block|block_content|breakpoint|ckeditor5|comment|config|config_translation|contact|content_moderation|content_translation|contextual|datetime|datetime_range|dblog|dynamic_page_cache|editor|field|field_ui|file|filter|help|image|jsonapi|language|layout_builder|link|locale|media|media_library|menu_link_content|menu_ui|migrate|migrate_drupal|mysql|mysqli|navigation|node|options|package_manager|path|path_alias|pgsql|responsive_image|rest|search|serialization|shortcut|sqlite|system|taxonomy|text|toolbar|update|user|views|views_ui|workflows|workspaces|workspaces_ui)\\[^"]+" now to avoid errors or add an explicit @return annotation to suppress this message%
%Method "Drupal\\[^"]+::[^"]+\(\)" might add "[^"]+" as a native return type declaration in the future. Do the same in (?:implementation|child class) "Drupal\\(Core|basic_auth|big_pipe|block|block_content|breakpoint|ckeditor5|comment|config|config_translation|contact|content_moderation|content_translation|contextual|datetime|datetime_range|dblog|dynamic_page_cache|editor|field|field_ui|file|filter|help|image|jsonapi|language|layout_builder|link|locale|media|media_library|menu_link_content|menu_ui|migrate|migrate_drupal|mysql|mysqli|navigation|node|options|package_manager|path|path_alias|pgsql|responsive_image|rest|search|serialization|sqlite|system|taxonomy|text|toolbar|update|user|views|views_ui|workflows|workspaces|workspaces_ui)\\[^"]+" now to avoid errors or add an explicit @return annotation to suppress this message%
# Test modules that we skip for now, but can be fixed any time.
%Method "Drupal\\[^"]+::[^"]+\(\)" might add "[^"]+" as a native return type declaration in the future. Do the same in (?:implementation|child class) "Drupal\\(Tests\\(Core|block|block_content|comment|editor|field|filter|image|language|layout_builder|media|menu_link_content|node|path_alias|responsive_image|search|shortcut|system|taxonomy|user|views|workflows|workspaces)|FunctionalTests\\Rest|test_.*|.*_test|.*_test_.*|ckeditor5_plugin_elements_subset|dummydb|search_embedded_form|search_extra_type)\\[^"]+" now to avoid errors or add an explicit @return annotation to suppress this message%

Expand Down
144 changes: 0 additions & 144 deletions core/.phpstan-baseline.php
Original file line number Diff line number Diff line change
Expand Up @@ -20607,132 +20607,6 @@
'count' => 1,
'path' => __DIR__ . '/modules/serialization/tests/src/Kernel/MapDataNormalizerTest.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\Entity\\\\Shortcut\\:\\:postSave\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/Entity/Shortcut.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\Entity\\\\ShortcutSet\\:\\:postSave\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/Entity/ShortcutSet.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\Entity\\\\ShortcutSet\\:\\:preDelete\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/Entity/ShortcutSet.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\Form\\\\SetCustomize\\:\\:form\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/Form/SetCustomize.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\Form\\\\SetCustomize\\:\\:save\\(\\) should return int but return statement is missing\\.$#',
'identifier' => 'return.missing',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/Form/SetCustomize.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\Form\\\\SwitchShortcutSet\\:\\:submitForm\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/Form/SwitchShortcutSet.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\Form\\\\SwitchShortcutSet\\:\\:validateForm\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/Form/SwitchShortcutSet.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutForm\\:\\:form\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutForm.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutForm\\:\\:save\\(\\) should return int but return statement is missing\\.$#',
'identifier' => 'return.missing',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutForm.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutSetForm\\:\\:form\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutSetForm.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutSetForm\\:\\:save\\(\\) should return int but return statement is missing\\.$#',
'identifier' => 'return.missing',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutSetForm.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutSetStorage\\:\\:assignUser\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutSetStorage.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutSetStorage\\:\\:deleteAssignedShortcutSets\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutSetStorage.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutSetStorageInterface\\:\\:assignUser\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutSetStorageInterface.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\shortcut\\\\ShortcutSetStorageInterface\\:\\:deleteAssignedShortcutSets\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/src/ShortcutSetStorageInterface.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\shortcut\\\\Functional\\\\ShortcutLinksTest\\:\\:assertBlockAppears\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\shortcut\\\\Functional\\\\ShortcutLinksTest\\:\\:assertNoBlockAppears\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\shortcut\\\\Functional\\\\ShortcutTestBase\\:\\:generateShortcutSet\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/tests/src/Functional/ShortcutTestBase.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\shortcut\\\\Functional\\\\ShortcutTranslationUITest\\:\\:getNewEntityValues\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\shortcut\\\\FunctionalJavascript\\\\NavigationBlockUiTest\\:\\:clickContextualLink\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/tests/src/FunctionalJavascript/NavigationBlockUiTest.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\shortcut\\\\FunctionalJavascript\\\\NavigationBlockUiTest\\:\\:toggleContextualTriggerVisibility\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/modules/shortcut/tests/src/FunctionalJavascript/NavigationBlockUiTest.php',
];
$ignoreErrors[] = [
'message' => '#^Calling md5\\(\\) is forbidden, use hash\\(\\) with an xxHash algorithm instead\\.$#',
'identifier' => 'disallowed.function',
Expand Down Expand Up @@ -32937,12 +32811,6 @@
'count' => 1,
'path' => __DIR__ . '/profiles/demo_umami/modules/demo_umami_content/tests/src/Functional/UninstallDefaultContentTest.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\standard\\\\FunctionalJavascript\\\\StandardPerformanceTest\\:\\:refreshVariables\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\drupal_system_listing_compatible_test\\\\Kernel\\\\SystemListingCrossProfileCompatibleTest\\:\\:testSystemListing\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
Expand Down Expand Up @@ -33215,12 +33083,6 @@
'count' => 1,
'path' => __DIR__ . '/tests/Drupal/TestSite/Commands/TestSiteInstallCommand.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\TestSite\\\\Commands\\\\TestSiteInstallCommand\\:\\:refreshVariables\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 1,
'path' => __DIR__ . '/tests/Drupal/TestSite/Commands/TestSiteInstallCommand.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\TestSite\\\\Commands\\\\TestSiteInstallCommand\\:\\:resetAll\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
Expand Down Expand Up @@ -33377,12 +33239,6 @@
'count' => 1,
'path' => __DIR__ . '/tests/Drupal/Tests/BrowserTestBase.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\BrowserTestBase\\:\\:refreshVariables\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
'count' => 2,
'path' => __DIR__ . '/tests/Drupal/Tests/BrowserTestBase.php',
];
$ignoreErrors[] = [
'message' => '#^Method Drupal\\\\Tests\\\\BrowserTestBase\\:\\:registerSessions\\(\\) has no return type specified\\.$#',
'identifier' => 'missingType.return',
Expand Down
5 changes: 1 addition & 4 deletions core/MAINTAINERS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Core JavaScript packages

Team facilitators
- Pamela Barone 'pameeela' (pameeela) https://www.drupal.org/u/pameeela
- (provisional) Griffyn Heels 'griffynh' (griffynh) https://www.drupal.org/u/griffynh
- Griffyn Heels 'griffynh' (griffynh) https://www.drupal.org/u/griffynh

Initiative facilitators
- Gábor Hojtsy 'Gábor Hojtsy' (goba) https://www.drupal.org/u/gábor-hojtsy
Expand Down Expand Up @@ -375,9 +375,6 @@ Search
Serialization
- Brad Jones 'bradjones1' (bradjones1) https://www.drupal.org/u/bradjones1

Shortcut
- Jibran Ijaz 'jibran' (jibran) https://www.drupal.org/u/jibran

Stark
- John Albin Wilkins 'JohnAlbin' (johnalbin) https://www.drupal.org/u/johnalbin

Expand Down
6 changes: 1 addition & 5 deletions core/core.services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -695,10 +695,6 @@ services:
container.namespaces:
class: ArrayObject
arguments: [ '%container.namespaces%' ]
container.trait:
abstract: true
calls:
- [setContainer, ['@service_container']]
default_plugin_manager:
abstract: true
arguments: ['@container.namespaces', '@cache.discovery', '@module_handler']
Expand Down Expand Up @@ -1964,7 +1960,7 @@ services:
Drupal\Core\Update\UpdateHookRegistry: '@update.update_hook_registry'
update.post_update_registry:
class: Drupal\Core\Update\UpdateRegistry
arguments: ['%app.root%', '%site.path%', '%container.modules%', '@update.key_value.post_update', '@theme_handler', 'post_update']
arguments: ['%app.root%', '%site.path%', '%container.modules%', '@update.key_value.post_update', '@theme_handler', '@cache.memory', 'post_update']
update.key_value.post_update:
class: Drupal\Core\KeyValueStore\KeyValueStoreInterface
factory: ['@keyvalue', 'get']
Expand Down
57 changes: 55 additions & 2 deletions core/includes/install.core.inc
Original file line number Diff line number Diff line change
Expand Up @@ -1582,6 +1582,17 @@ function install_profile_modules(&$install_state) {
install_core_entity_type_definitions();

$modules = $install_state['profile_info']['install'];
$database_module = _install_get_database_module_name();
if ($database_module !== NULL) {
array_unshift($modules, $database_module);
}

// Extra module support is only implemented by the testing framework, to
// reduce the number of container rebuilds during test runs.
$extra_modules = $install_state['extra_modules'] ?? [];
if ($extra_modules) {
$modules = array_merge($modules, $extra_modules);
}
$files = \Drupal::service('extension.list.module')->getList();

// Always install required modules first. Respect the dependencies between
Expand Down Expand Up @@ -1682,6 +1693,12 @@ function install_core_entity_type_definitions(): void {
function install_profile_themes(&$install_state): void {
// Install the themes specified by the installation profile.
$themes = $install_state['profile_info']['themes'];

// Default theme support is only implemented by the testing framework, to
// reduce the number of container rebuilds during test runs.
if (isset($install_state['default_theme'])) {
$themes = array_unique(array_merge($themes, [$install_state['default_theme']]));
}
\Drupal::service('theme_installer')->install($themes);

// Ensure that the install profile's theme is used.
Expand All @@ -1705,7 +1722,15 @@ function install_install_profile(&$install_state): void {
// any disparities that this creates.
\Drupal::service('config.installer')->installOptionalConfig();

\Drupal::service('module_installer')->install([$install_state['parameters']['profile']], FALSE);
if (empty($install_state['profile_info']['opt_out_install'])) {
\Drupal::service('module_installer')->install([$install_state['parameters']['profile']], FALSE);
}

if (isset($install_state['default_theme'])) {
\Drupal::service('config.factory')->getEditable('system.theme')
->set('default', $install_state['default_theme'])
->save();
}

// Ensure that the install profile's theme is used.
// @see _drupal_maintenance_theme()
Expand Down Expand Up @@ -2527,8 +2552,10 @@ function install_recipe_required_modules(array $install_state) {
// Always install required modules first.
$required = [];

$database_module = _install_get_database_module_name();

foreach ($files as $module => $extension) {
if (!empty($extension->info['required'])) {
if (!empty($extension->info['required']) || $module === $database_module) {
$required[$module] = $extension->sort;
}
}
Expand Down Expand Up @@ -2568,3 +2595,29 @@ function install_recipe_batch(&$install_state) {

return $batch_builder->toArray();
}

/**
* Gets the database driver module name.
*
* The database driver is provided by a module. That module must be
* installed before any other module, as it must be able to override any call
* to hook_schema() or any "backend_overridable" service. In edge cases, a
* driver module may extend from another driver module. In order for the
* extended classes to be autoloadable, the extending module should list the
* extended module in its dependencies.
*
* @return ?string
* The database driver module or NULL if none is found.
*/
function _install_get_database_module_name(): ?string {
$connection = Database::getConnection();
$provider = $connection->getProvider();
$database_module = NULL;
if ($provider !== 'core') {
$autoload = $connection->getConnectionOptions()['autoload'] ?? '';
if (str_contains($autoload, 'src/Driver/Database/')) {
$database_module = $provider;
}
}
return $database_module;
}
21 changes: 2 additions & 19 deletions core/includes/install.inc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

use Drupal\Component\Utility\Unicode;
use Drupal\Component\Utility\UrlHelper;
use Drupal\Core\Database\Database;
use Drupal\Core\Extension\Dependency;
use Drupal\Core\Extension\Extension;
use Drupal\Core\Extension\ExtensionDiscovery;
Expand Down Expand Up @@ -216,30 +215,14 @@ function drupal_install_system($install_state): void {
// Store the installation profile in configuration to populate the
// 'install_profile' container parameter.
$config = \Drupal::configFactory()->getEditable('core.extension');
if ($install_state['parameters']['profile'] === FALSE) {
if ($install_state['parameters']['profile'] === FALSE
|| !empty($install_state['profile_info']['opt_out_install'])) {
$config->clear('profile');
}
else {
$config->set('profile', $install_state['parameters']['profile']);
}
$config->save();

$connection = Database::getConnection();
$provider = $connection->getProvider();
// When the database driver is provided by a module, then install that module.
// This module must be installed before any other module, as it must be able
// to override any call to hook_schema() or any "backend_overridable" service.
// In edge cases, a driver module may extend from another driver module (for
// instance, a module to provide backward compatibility with a database
// version no longer supported by core). In order for the extended classes to
// be autoloadable, the extending module should list the extended module in
// its dependencies, and here the dependencies will be installed as well.
if ($provider !== 'core') {
$autoload = $connection->getConnectionOptions()['autoload'] ?? '';
if (str_contains($autoload, 'src/Driver/Database/')) {
$kernel->getContainer()->get('module_installer')->install([$provider], TRUE);
}
}
}

/**
Expand Down
5 changes: 4 additions & 1 deletion core/lib/Drupal/Core/Asset/JsCollectionOptimizerLazy.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,10 @@ public function optimize(array $js_assets, array $libraries) {
// either the include or exclude query arguments. Replace this with
// the explicit list of libraries in the aggregate.
if (isset($js_asset['libraries'])) {
unset($query['include'], $query['exclude'], $query['delta']);
unset($query['include'], $query['exclude'], $query['delta'], $query['scope']);
foreach ($js_asset['items'] as &$asset) {
unset($asset['scope']);
}
$query['libraries'] = UrlHelper::compressQueryParameter(implode(',', $js_asset['libraries']));
}
// Add a filename prefix to mitigate ad blockers which can block
Expand Down
Loading