diff --git a/wp-includes/class-wp-script-modules.php b/wp-includes/class-wp-script-modules.php index d097785a7d..02dd7add4e 100644 --- a/wp-includes/class-wp-script-modules.php +++ b/wp-includes/class-wp-script-modules.php @@ -1,6 +1,6 @@ */ private $enqueued_before_registered = array(); /** - * Registers the module if no module with that module identifier has already - * been registered. + * Registers the script module if no script module with that script module + * identifier has already been registered. * * @since 6.5.0 * - * @param string $module_id The identifier of the module. - * Should be unique. It will be used - * in the final import map. - * @param string $src Full URL of the module, or path of - * the module relative to the - * WordPress root directory. - * @param array $deps Optional. An array of module - * identifiers of the dependencies of - * this module. The dependencies can - * be strings or arrays. If they are - * arrays, they need an `id` key with - * the module identifier, and can - * contain an `import` key with either - * `static` or `dynamic`. By default, - * dependencies that don't contain an - * `import` key are considered static. - * @param string|false|null $version Optional. String specifying the - * module version number. Defaults to - * false. It is added to the URL as a - * query string for cache busting - * purposes. If $version is set to - * false, the version number is the - * currently installed WordPress - * version. If $version is set to - * null, no version is added. + * @param string $id The identifier of the script module. Should be unique. It will be used in the + * final import map. + * @param string $src Optional. Full URL of the script module, or path of the script module relative + * to the WordPress root directory. If it is provided and the script module has + * not been registered yet, it will be registered. + * @param array $deps { + * Optional. List of dependencies. + * + * @type string|array $0... { + * An array of script module identifiers of the dependencies of this script + * module. The dependencies can be strings or arrays. If they are arrays, + * they need an `id` key with the script module identifier, and can contain + * an `import` key with either `static` or `dynamic`. By default, + * dependencies that don't contain an `import` key are considered static. + * + * @type string $id The script module identifier. + * @type string $import Optional. Import type. May be either `static` or + * `dynamic`. Defaults to `static`. + * } + * } + * @param string|false|null $version Optional. String specifying the script module version number. Defaults to false. + * It is added to the URL as a query string for cache busting purposes. If $version + * is set to false, the version number is the currently installed WordPress version. + * If $version is set to null, no version is added. */ - public function register( $module_id, $src, $deps = array(), $version = false ) { - if ( ! isset( $this->registered[ $module_id ] ) ) { + public function register( string $id, string $src, array $deps = array(), $version = false ) { + if ( ! isset( $this->registered[ $id ] ) ) { $dependencies = array(); foreach ( $deps as $dependency ) { if ( is_array( $dependency ) ) { @@ -85,10 +84,10 @@ class WP_Script_Modules { } } - $this->registered[ $module_id ] = array( + $this->registered[ $id ] = array( 'src' => $src, 'version' => $version, - 'enqueue' => isset( $this->enqueued_before_registered[ $module_id ] ), + 'enqueue' => isset( $this->enqueued_before_registered[ $id ] ), 'dependencies' => $dependencies, 'enqueued' => false, 'preloaded' => false, @@ -97,116 +96,113 @@ class WP_Script_Modules { } /** - * Marks the module to be enqueued in the page the next time - * `prints_enqueued_modules` is called. + * Marks the script module to be enqueued in the page the next time + * `print_enqueued_script_modules` is called. * - * If a src is provided and the module has not been registered yet, it will be - * registered. + * If a src is provided and the script module has not been registered yet, it + * will be registered. * * @since 6.5.0 * - * @param string $module_id The identifier of the module. - * Should be unique. It will be used - * in the final import map. - * @param string $src Optional. Full URL of the module, - * or path of the module relative to - * the WordPress root directory. If - * it is provided and the module has - * not been registered yet, it will be - * registered. - * @param array $deps Optional. An array of module - * identifiers of the dependencies of - * this module. The dependencies can - * be strings or arrays. If they are - * arrays, they need an `id` key with - * the module identifier, and can - * contain an `import` key with either - * `static` or `dynamic`. By default, - * dependencies that don't contain an - * `import` key are considered static. - * @param string|false|null $version Optional. String specifying the - * module version number. Defaults to - * false. It is added to the URL as a - * query string for cache busting - * purposes. If $version is set to - * false, the version number is the - * currently installed WordPress - * version. If $version is set to - * null, no version is added. + * @param string $id The identifier of the script module. Should be unique. It will be used in the + * final import map. + * @param string $src Optional. Full URL of the script module, or path of the script module relative + * to the WordPress root directory. If it is provided and the script module has + * not been registered yet, it will be registered. + * @param array $deps { + * Optional. List of dependencies. + * + * @type string|array $0... { + * An array of script module identifiers of the dependencies of this script + * module. The dependencies can be strings or arrays. If they are arrays, + * they need an `id` key with the script module identifier, and can contain + * an `import` key with either `static` or `dynamic`. By default, + * dependencies that don't contain an `import` key are considered static. + * + * @type string $id The script module identifier. + * @type string $import Optional. Import type. May be either `static` or + * `dynamic`. Defaults to `static`. + * } + * } + * @param string|false|null $version Optional. String specifying the script module version number. Defaults to false. + * It is added to the URL as a query string for cache busting purposes. If $version + * is set to false, the version number is the currently installed WordPress version. + * If $version is set to null, no version is added. */ - public function enqueue( $module_id, $src = '', $deps = array(), $version = false ) { - if ( isset( $this->registered[ $module_id ] ) ) { - $this->registered[ $module_id ]['enqueue'] = true; + public function enqueue( string $id, string $src = '', array $deps = array(), $version = false ) { + if ( isset( $this->registered[ $id ] ) ) { + $this->registered[ $id ]['enqueue'] = true; } elseif ( $src ) { - $this->register( $module_id, $src, $deps, $version ); - $this->registered[ $module_id ]['enqueue'] = true; + $this->register( $id, $src, $deps, $version ); + $this->registered[ $id ]['enqueue'] = true; } else { - $this->enqueued_before_registered[ $module_id ] = true; + $this->enqueued_before_registered[ $id ] = true; } } /** - * Unmarks the module so it will no longer be enqueued in the page. + * Unmarks the script module so it will no longer be enqueued in the page. * * @since 6.5.0 * - * @param string $module_id The identifier of the module. + * @param string $id The identifier of the script module. */ - public function dequeue( $module_id ) { - if ( isset( $this->registered[ $module_id ] ) ) { - $this->registered[ $module_id ]['enqueue'] = false; + public function dequeue( string $id ) { + if ( isset( $this->registered[ $id ] ) ) { + $this->registered[ $id ]['enqueue'] = false; } - unset( $this->enqueued_before_registered[ $module_id ] ); + unset( $this->enqueued_before_registered[ $id ] ); } /** - * Adds the hooks to print the import map, enqueued modules and module - * preloads. + * Adds the hooks to print the import map, enqueued script modules and script + * module preloads. * - * It adds the actions to print the enqueued modules and module preloads to - * both `wp_head` and `wp_footer` because in classic themes, the modules - * used by the theme and plugins will likely be able to be printed in the - * `head`, but the ones used by the blocks will need to be enqueued in the - * `footer`. + * It adds the actions to print the enqueued script modules and script module + * preloads to both `wp_head` and `wp_footer` because in classic themes, the + * script modules used by the theme and plugins will likely be able to be + * printed in the `head`, but the ones used by the blocks will need to be + * enqueued in the `footer`. * - * As all modules are deferred and dependencies are handled by the browser, - * the order of the modules is not important, but it's still better to print - * the ones that are available when the `wp_head` is rendered, so the browser - * starts downloading those as soon as possible. + * As all script modules are deferred and dependencies are handled by the + * browser, the order of the script modules is not important, but it's still + * better to print the ones that are available when the `wp_head` is rendered, + * so the browser starts downloading those as soon as possible. * * The import map is also printed in the footer to be able to include the - * dependencies of all the modules, including the ones printed in the footer. + * dependencies of all the script modules, including the ones printed in the + * footer. * * @since 6.5.0 */ public function add_hooks() { - add_action( 'wp_head', array( $this, 'print_enqueued_modules' ) ); - add_action( 'wp_head', array( $this, 'print_module_preloads' ) ); - add_action( 'wp_footer', array( $this, 'print_enqueued_modules' ) ); - add_action( 'wp_footer', array( $this, 'print_module_preloads' ) ); + add_action( 'wp_head', array( $this, 'print_enqueued_script_modules' ) ); + add_action( 'wp_head', array( $this, 'print_script_module_preloads' ) ); + add_action( 'wp_footer', array( $this, 'print_enqueued_script_modules' ) ); + add_action( 'wp_footer', array( $this, 'print_script_module_preloads' ) ); add_action( 'wp_footer', array( $this, 'print_import_map' ) ); } /** - * Prints the enqueued modules using script tags with type="module" + * Prints the enqueued script modules using script tags with type="module" * attributes. * - * If a enqueued module has already been printed, it will not be printed again - * on subsequent calls to this function. + * If a enqueued script module has already been printed, it will not be + * printed again on subsequent calls to this function. * * @since 6.5.0 */ - public function print_enqueued_modules() { - foreach ( $this->get_marked_for_enqueue() as $module_id => $module ) { - if ( false === $module['enqueued'] ) { + public function print_enqueued_script_modules() { + foreach ( $this->get_marked_for_enqueue() as $id => $script_module ) { + if ( false === $script_module['enqueued'] ) { // Mark it as enqueued so it doesn't get enqueued again. - $this->registered[ $module_id ]['enqueued'] = true; + $this->registered[ $id ]['enqueued'] = true; wp_print_script_tag( array( 'type' => 'module', - 'src' => $this->get_versioned_src( $module ), - 'id' => $module_id . '-js-module', + 'src' => $this->get_versioned_src( $script_module ), + 'id' => $id . '-js-module', ) ); } @@ -214,26 +210,26 @@ class WP_Script_Modules { } /** - * Prints the the static dependencies of the enqueued modules using link tags - * with rel="modulepreload" attributes. + * Prints the the static dependencies of the enqueued script modules using + * link tags with rel="modulepreload" attributes. * - * If a module is marked for enqueue, it will not be preloaded. If a preloaded - * module has already been printed, it will not be printed again on subsequent - * calls to this function. + * If a script module is marked for enqueue, it will not be preloaded. If a + * preloaded script module has already been printed, it will not be printed + * again on subsequent calls to this function. * * @since 6.5.0 */ - public function print_module_preloads() { - foreach ( $this->get_dependencies( array_keys( $this->get_marked_for_enqueue() ), array( 'static' ) ) as $module_id => $module ) { + public function print_script_module_preloads() { + foreach ( $this->get_dependencies( array_keys( $this->get_marked_for_enqueue() ), array( 'static' ) ) as $id => $script_module ) { // Don't preload if it's marked for enqueue or has already been preloaded. - if ( true !== $module['enqueue'] && false === $module['preloaded'] ) { + if ( true !== $script_module['enqueue'] && false === $script_module['preloaded'] ) { // Mark it as preloaded so it doesn't get preloaded again. - $this->registered[ $module_id ]['preloaded'] = true; + $this->registered[ $id ]['preloaded'] = true; echo sprintf( '', - esc_url( $this->get_versioned_src( $module ) ), - esc_attr( $module_id . '-js-modulepreload' ) + esc_url( $this->get_versioned_src( $script_module ) ), + esc_attr( $id . '-js-modulepreload' ) ); } } @@ -262,37 +258,37 @@ class WP_Script_Modules { * * @since 6.5.0 * - * @return array Array with an `imports` key mapping to an array of module identifiers and their respective URLs, - * including the version query. + * @return array Array with an `imports` key mapping to an array of script module identifiers and their respective + * URLs, including the version query. */ - private function get_import_map() { + private function get_import_map(): array { $imports = array(); - foreach ( $this->get_dependencies( array_keys( $this->get_marked_for_enqueue() ) ) as $module_id => $module ) { - $imports[ $module_id ] = $this->get_versioned_src( $module ); + foreach ( $this->get_dependencies( array_keys( $this->get_marked_for_enqueue() ) ) as $id => $script_module ) { + $imports[ $id ] = $this->get_versioned_src( $script_module ); } return array( 'imports' => $imports ); } /** - * Retrieves the list of modules marked for enqueue. + * Retrieves the list of script modules marked for enqueue. * * @since 6.5.0 * - * @return array Modules marked for enqueue, keyed by module identifier. + * @return array Script modules marked for enqueue, keyed by script module identifier. */ - private function get_marked_for_enqueue() { + private function get_marked_for_enqueue(): array { $enqueued = array(); - foreach ( $this->registered as $module_id => $module ) { - if ( true === $module['enqueue'] ) { - $enqueued[ $module_id ] = $module; + foreach ( $this->registered as $id => $script_module ) { + if ( true === $script_module['enqueue'] ) { + $enqueued[ $id ] = $script_module; } } return $enqueued; } /** - * Retrieves all the dependencies for the given module identifiers, filtered - * by import types. + * Retrieves all the dependencies for the given script module identifiers, + * filtered by import types. * * It will consolidate an array containing a set of unique dependencies based * on the requested import types: 'static', 'dynamic', or both. This method is @@ -300,33 +296,34 @@ class WP_Script_Modules { * * @since 6.5.0 * - * @param array $module_ids The identifiers of the modules for which to gather dependencies. - * @param array $import_types Optional. Import types of dependencies to retrieve: 'static', 'dynamic', or both. - * Default is both. - * @return array List of dependencies, keyed by module identifier. + + * @param string[] $ids The identifiers of the script modules for which to gather dependencies. + * @param array $import_types Optional. Import types of dependencies to retrieve: 'static', 'dynamic', or both. + * Default is both. + * @return array List of dependencies, keyed by script module identifier. */ - private function get_dependencies( $module_ids, $import_types = array( 'static', 'dynamic' ) ) { + private function get_dependencies( array $ids, array $import_types = array( 'static', 'dynamic' ) ) { return array_reduce( - $module_ids, - function ( $dependency_modules, $module_id ) use ( $import_types ) { + $ids, + function ( $dependency_script_modules, $id ) use ( $import_types ) { $dependencies = array(); - foreach ( $this->registered[ $module_id ]['dependencies'] as $dependency ) { + foreach ( $this->registered[ $id ]['dependencies'] as $dependency ) { if ( in_array( $dependency['import'], $import_types, true ) && isset( $this->registered[ $dependency['id'] ] ) && - ! isset( $dependency_modules[ $dependency['id'] ] ) + ! isset( $dependency_script_modules[ $dependency['id'] ] ) ) { $dependencies[ $dependency['id'] ] = $this->registered[ $dependency['id'] ]; } } - return array_merge( $dependency_modules, $dependencies, $this->get_dependencies( array_keys( $dependencies ), $import_types ) ); + return array_merge( $dependency_script_modules, $dependencies, $this->get_dependencies( array_keys( $dependencies ), $import_types ) ); }, array() ); } /** - * Gets the versioned URL for a module src. + * Gets the versioned URL for a script module src. * * If $version is set to false, the version number is the currently installed * WordPress version. If $version is set to null, no version is added. @@ -334,19 +331,19 @@ class WP_Script_Modules { * * @since 6.5.0 * - * @param array $module The module. - * @return string The module src with a version if relevant. + * @param array $script_module The script module. + * @return string The script module src with a version if relevant. */ - private function get_versioned_src( array $module ) { + private function get_versioned_src( array $script_module ): string { $args = array(); - if ( false === $module['version'] ) { + if ( false === $script_module['version'] ) { $args['ver'] = get_bloginfo( 'version' ); - } elseif ( null !== $module['version'] ) { - $args['ver'] = $module['version']; + } elseif ( null !== $script_module['version'] ) { + $args['ver'] = $script_module['version']; } if ( $args ) { - return add_query_arg( $args, $module['src'] ); + return add_query_arg( $args, $script_module['src'] ); } - return $module['src']; + return $script_module['src']; } } diff --git a/wp-includes/script-modules.php b/wp-includes/script-modules.php index 52552317e4..205494f699 100644 --- a/wp-includes/script-modules.php +++ b/wp-includes/script-modules.php @@ -1,6 +1,6 @@ $deps Optional. An array of module - * identifiers of the dependencies of - * this module. The dependencies can - * be strings or arrays. If they are - * arrays, they need an `id` key with - * the module identifier, and can - * contain an `import` key with either - * `static` or `dynamic`. By default, - * dependencies that don't contain an - * `import` key are considered static. - * @param string|false|null $version Optional. String specifying the - * module version number. Defaults to - * false. It is added to the URL as a - * query string for cache busting - * purposes. If $version is set to - * false, the version number is the - * currently installed WordPress - * version. If $version is set to - * null, no version is added. + * @param string $id The identifier of the script module. Should be unique. It will be used in the + * final import map. + * @param string $src Optional. Full URL of the script module, or path of the script module relative + * to the WordPress root directory. If it is provided and the script module has + * not been registered yet, it will be registered. + * @param array $deps { + * Optional. List of dependencies. + * + * @type string|array $0... { + * An array of script module identifiers of the dependencies of this script + * module. The dependencies can be strings or arrays. If they are arrays, + * they need an `id` key with the script module identifier, and can contain + * an `import` key with either `static` or `dynamic`. By default, + * dependencies that don't contain an `import` key are considered static. + * + * @type string $id The script module identifier. + * @type string $import Optional. Import type. May be either `static` or + * `dynamic`. Defaults to `static`. + * } + * } + * @param string|false|null $version Optional. String specifying the script module version number. Defaults to false. + * It is added to the URL as a query string for cache busting purposes. If $version + * is set to false, the version number is the currently installed WordPress version. + * If $version is set to null, no version is added. */ -function wp_register_module( $module_id, $src, $deps = array(), $version = false ) { - wp_modules()->register( $module_id, $src, $deps, $version ); +function wp_register_script_module( string $id, string $src, array $deps = array(), $version = false ) { + wp_script_modules()->register( $id, $src, $deps, $version ); } /** - * Marks the module to be enqueued in the page. + * Marks the script module to be enqueued in the page. * - * If a src is provided and the module has not been registered yet, it will be - * registered. + * If a src is provided and the script module has not been registered yet, it + * will be registered. * * @since 6.5.0 * - * @param string $module_id The identifier of the module. - * Should be unique. It will be used - * in the final import map. - * @param string $src Optional. Full URL of the module, - * or path of the module relative to - * the WordPress root directory. If - * it is provided and the module has - * not been registered yet, it will be - * registered. - * @param array $deps Optional. An array of module - * identifiers of the dependencies of - * this module. The dependencies can - * be strings or arrays. If they are - * arrays, they need an `id` key with - * the module identifier, and can - * contain an `import` key with either - * `static` or `dynamic`. By default, - * dependencies that don't contain an - * `import` key are considered static. - * @param string|false|null $version Optional. String specifying the - * module version number. Defaults to - * false. It is added to the URL as a - * query string for cache busting - * purposes. If $version is set to - * false, the version number is the - * currently installed WordPress - * version. If $version is set to - * null, no version is added. + * @param string $id The identifier of the script module. Should be unique. It will be used in the + * final import map. + * @param string $src Optional. Full URL of the script module, or path of the script module relative + * to the WordPress root directory. If it is provided and the script module has + * not been registered yet, it will be registered. + * @param array $deps { + * Optional. List of dependencies. + * + * @type string|array $0... { + * An array of script module identifiers of the dependencies of this script + * module. The dependencies can be strings or arrays. If they are arrays, + * they need an `id` key with the script module identifier, and can contain + * an `import` key with either `static` or `dynamic`. By default, + * dependencies that don't contain an `import` key are considered static. + * + * @type string $id The script module identifier. + * @type string $import Optional. Import type. May be either `static` or + * `dynamic`. Defaults to `static`. + * } + * } + * @param string|false|null $version Optional. String specifying the script module version number. Defaults to false. + * It is added to the URL as a query string for cache busting purposes. If $version + * is set to false, the version number is the currently installed WordPress version. + * If $version is set to null, no version is added. */ -function wp_enqueue_module( $module_id, $src = '', $deps = array(), $version = false ) { - wp_modules()->enqueue( $module_id, $src, $deps, $version ); +function wp_enqueue_script_module( string $id, string $src = '', array $deps = array(), $version = false ) { + wp_script_modules()->enqueue( $id, $src, $deps, $version ); } /** - * Unmarks the module so it is no longer enqueued in the page. + * Unmarks the script module so it is no longer enqueued in the page. * * @since 6.5.0 * - * @param string $module_id The identifier of the module. + * @param string $id The identifier of the script module. */ -function wp_dequeue_module( $module_id ) { - wp_modules()->dequeue( $module_id ); +function wp_dequeue_script_module( string $id ) { + wp_script_modules()->dequeue( $id ); } diff --git a/wp-includes/version.php b/wp-includes/version.php index 1937935d25..06767d3b73 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.5-alpha-57326'; +$wp_version = '6.5-alpha-57327'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.