Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
ee14eb6
Script Modules: Bump fetchpriority for dependencies to be as high as …
westonruter Sep 6, 2025
0222ca9
Add missing phpdoc param
westonruter Sep 6, 2025
e2d4676
Explicitly set a11y module to have fetchpriority=low
westonruter Sep 6, 2025
c76ceb0
Add support for fetchpriority bumping in WP_Scripts
westonruter Sep 6, 2025
e652cbd
Account for whether a dependent script is actually enqueued
westonruter Sep 6, 2025
3dd0e0f
Add tests for complex dependency graphs
westonruter Sep 11, 2025
c59f440
Let fetchpriority of script module be determined be enqueued module
westonruter Sep 17, 2025
e453a53
Merge branch 'trunk' of https://github.com/WordPress/wordpress-develo…
westonruter Sep 29, 2025
546e7a7
Stop iterating once highest priority found
westonruter Sep 29, 2025
a03337a
Simplify get_recursive_dependents() with better defensive coding
westonruter Sep 29, 2025
0b0f328
Merge branch 'trunk' into add/dependent-fetchpriority-harmony
westonruter Oct 8, 2025
334a82b
Better harmonize get_highest_fetchpriority implementations
westonruter Oct 8, 2025
cf809c8
Merge branch 'trunk' into add/dependent-fetchpriority-harmony
westonruter Oct 10, 2025
3f5ae8d
Update _WP_Dependency::$ver to allow null in addition to string|false
westonruter Oct 12, 2025
4dd633f
Account for directly printed scripts without enqueueing
westonruter Oct 12, 2025
95789ba
Ensure fetchpriority is processed for scripts without extra key set
westonruter Oct 12, 2025
86c13c9
Merge branch 'trunk' of https://github.com/WordPress/wordpress-develo…
westonruter Oct 13, 2025
98abb51
Switch back to enqueue
westonruter Oct 13, 2025
eada641
Merge branch 'trunk' of https://github.com/WordPress/wordpress-develo…
westonruter Oct 14, 2025
05e3173
Restore array_unique()
westonruter Oct 14, 2025
ed8a53f
Add test for wp_default_script_modules()
westonruter Oct 14, 2025
9d021ae
Test that high priority dependent of default script modules causes de…
westonruter Oct 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Test that high priority dependent of default script modules causes de…
…faults to bump priority
  • Loading branch information
westonruter committed Oct 14, 2025
commit 9d021ae0bda3738ba3bb0624ff64bf75bba3f698
2 changes: 1 addition & 1 deletion src/wp-includes/class-wp-script-modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ public function print_script_module_preloads() {
if ( $highest_fetchpriority !== $script_module['fetchpriority'] && 'auto' !== $script_module['fetchpriority'] ) {
printf( ' data-wp-fetchpriority="%s"', esc_attr( $script_module['fetchpriority'] ) );
}
echo '>';
echo ">\n";
}
}
}
Expand Down
65 changes: 53 additions & 12 deletions tests/phpunit/tests/script-modules/wpScriptModules.php
Original file line number Diff line number Diff line change
Expand Up @@ -1601,18 +1601,66 @@ public function test_fetchpriority_propagation() {
* Tests that default script modules are printed as expected.
*
* @covers ::wp_default_script_modules
* @covers ::print_script_module_preloads
* @covers ::print_enqueued_script_modules
* @covers WP_Script_Modules::print_script_module_preloads
* @covers WP_Script_Modules::print_enqueued_script_modules
*/
public function test_default_script_modules() {
wp_default_script_modules();
wp_enqueue_script_module( '@wordpress/a11y' );
wp_enqueue_script_module( '@wordpress/block-library/navigation/view' );

$actual = get_echo( array( wp_script_modules(), 'print_script_module_preloads' ) ) . "\n";
$actual = get_echo( array( wp_script_modules(), 'print_script_module_preloads' ) );
$actual .= get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) );

$actual = $this->normalize_markup_for_snapshot( $actual );

$expected = '
<link rel="modulepreload" href="/wp-includes/js/dist/script-modules/interactivity/debug.min.js" id="@wordpress/interactivity-js-modulepreload" fetchpriority="low">
<script type="module" src="/wp-includes/js/dist/script-modules/a11y/index.min.js" id="@wordpress/a11y-js-module" fetchpriority="low"></script>
<script type="module" src="/wp-includes/js/dist/script-modules/block-library/navigation/view.min.js" id="@wordpress/block-library/navigation/view-js-module" fetchpriority="low"></script>
';
$this->assertEqualHTML( $expected, $actual, '<body>', "Snapshot:\n$actual" );
}

/**
* Tests that a dependent with high priority for default script modules with a low fetch priority are printed as expected.
*
* @covers ::wp_default_script_modules
* @covers WP_Script_Modules::print_script_module_preloads
* @covers WP_Script_Modules::print_enqueued_script_modules
*/
public function test_dependent_of_default_script_modules() {
wp_default_script_modules();
wp_enqueue_script_module(
'super-important',
'/super-important-module.js',
array( '@wordpress/a11y', '@wordpress/block-library/navigation/view' ),
null,
array( 'fetchpriority' => 'high' )
);

$actual = get_echo( array( wp_script_modules(), 'print_script_module_preloads' ) );
$actual .= get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) );

$processor = new WP_HTML_Tag_Processor( $actual );
$actual = $this->normalize_markup_for_snapshot( $actual );

$expected = '
<link rel="modulepreload" href="/wp-includes/js/dist/script-modules/a11y/index.min.js" id="@wordpress/a11y-js-modulepreload" fetchpriority="high" data-wp-fetchpriority="low">
<link rel="modulepreload" href="/wp-includes/js/dist/script-modules/block-library/navigation/view.min.js" id="@wordpress/block-library/navigation/view-js-modulepreload" fetchpriority="high" data-wp-fetchpriority="low">
<link rel="modulepreload" href="/wp-includes/js/dist/script-modules/interactivity/debug.min.js" id="@wordpress/interactivity-js-modulepreload" fetchpriority="high" data-wp-fetchpriority="low">
<script type="module" src="/super-important-module.js" id="super-important-js-module" fetchpriority="high"></script>
';
$this->assertEqualHTML( $expected, $actual, '<body>', "Snapshot:\n$actual" );
}

/**
* Normalizes markup for snapshot.
*
* @param string $markup Markup.
* @return string Normalized markup.
*/
private function normalize_markup_for_snapshot( string $markup ): string {
$processor = new WP_HTML_Tag_Processor( $markup );
$clean_url = static function ( string $url ): string {
$url = preg_replace( '#^https?://[^/]+#', '', $url );
return remove_query_arg( 'ver', $url );
Expand All @@ -1624,14 +1672,7 @@ public function test_default_script_modules() {
$processor->set_attribute( 'src', $clean_url( $processor->get_attribute( 'src' ) ) );
}
}
$actual = $processor->get_updated_html();

$expected = '
<link rel="modulepreload" href="/wp-includes/js/dist/script-modules/interactivity/debug.min.js" id="@wordpress/interactivity-js-modulepreload" fetchpriority="low">
<script type="module" src="/wp-includes/js/dist/script-modules/a11y/index.min.js" id="@wordpress/a11y-js-module" fetchpriority="low"></script>
<script type="module" src="/wp-includes/js/dist/script-modules/block-library/navigation/view.min.js" id="@wordpress/block-library/navigation/view-js-module" fetchpriority="low"></script>
';
$this->assertEqualHTML( $expected, $actual, '<body>', "Snapshot:\n$actual" );
return $processor->get_updated_html();
}

/**
Expand Down
Loading