From 6c7ad529322abe078f64f3fe13ccd71ab5ad3907 Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Mon, 15 Jan 2024 15:29:23 +0100 Subject: [PATCH 1/7] Rename module functions to script_module --- src/wp-includes/script-modules.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/wp-includes/script-modules.php b/src/wp-includes/script-modules.php index 52552317e4aa5..b0ba2e76e97f5 100644 --- a/src/wp-includes/script-modules.php +++ b/src/wp-includes/script-modules.php @@ -18,7 +18,7 @@ * * @return WP_Script_Modules The main WP_Script_Modules instance. */ -function wp_modules() { +function wp_script_modules() { static $instance = null; if ( is_null( $instance ) ) { $instance = new WP_Script_Modules(); @@ -59,8 +59,8 @@ function wp_modules() { * 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( $module_id, $src, $deps = array(), $version = false ) { + wp_script_modules()->register( $module_id, $src, $deps, $version ); } /** @@ -100,8 +100,8 @@ function wp_register_module( $module_id, $src, $deps = array(), $version = false * 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( $module_id, $src = '', $deps = array(), $version = false ) { + wp_script_modules()->enqueue( $module_id, $src, $deps, $version ); } /** @@ -111,6 +111,6 @@ function wp_enqueue_module( $module_id, $src = '', $deps = array(), $version = f * * @param string $module_id The identifier of the module. */ -function wp_dequeue_module( $module_id ) { - wp_modules()->dequeue( $module_id ); +function wp_dequeue_script_module( $module_id ) { + wp_script_modules()->dequeue( $module_id ); } From e92ef00036fd524704f14ee60c573a3affd01a3a Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 16 Jan 2024 10:51:14 +0100 Subject: [PATCH 2/7] Rename all the DocBlocks and print functions --- src/wp-includes/class-wp-script-modules.php | 289 ++++++++++---------- src/wp-includes/script-modules.php | 136 ++++----- 2 files changed, 215 insertions(+), 210 deletions(-) diff --git a/src/wp-includes/class-wp-script-modules.php b/src/wp-includes/class-wp-script-modules.php index d097785a7d244..0f57ac63a1a11 100644 --- a/src/wp-includes/class-wp-script-modules.php +++ b/src/wp-includes/class-wp-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 Full URL of the script module, or + * path of the script module relative + * to the WordPress root directory. + * @param array $deps Optional. 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. + * @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( $id, $src, $deps = array(), $version = false ) { + if ( ! isset( $this->registered[ $id ] ) ) { $dependencies = array(); foreach ( $deps as $dependency ) { if ( is_array( $dependency ) ) { @@ -85,10 +86,10 @@ public function register( $module_id, $src, $deps = array(), $version = false ) } } - $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 +98,118 @@ public function register( $module_id, $src, $deps = array(), $version = false ) } /** - * 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 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. 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. + * @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( $id, $src = '', $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( $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 +217,26 @@ public function print_enqueued_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 +265,37 @@ public function print_import_map() { * * @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() { $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() { $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 +303,33 @@ private function get_marked_for_enqueue() { * * @since 6.5.0 * - * @param array $module_ids The identifiers of the modules for which to gather dependencies. + * @param array $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 module identifier. + * @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( $ids, $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 +337,19 @@ function ( $dependency_modules, $module_id ) use ( $import_types ) { * * @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 ) { $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/src/wp-includes/script-modules.php b/src/wp-includes/script-modules.php index b0ba2e76e97f5..3db359aaabbe4 100644 --- a/src/wp-includes/script-modules.php +++ b/src/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 Full URL of the script module, or + * path of the script module relative + * to the WordPress root directory. + * @param array $deps Optional. 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. + * @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_script_module( $module_id, $src, $deps = array(), $version = false ) { - wp_script_modules()->register( $module_id, $src, $deps, $version ); +function wp_register_script_module( $id, $src, $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 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. 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. + * @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_script_module( $module_id, $src = '', $deps = array(), $version = false ) { - wp_script_modules()->enqueue( $module_id, $src, $deps, $version ); +function wp_enqueue_script_module( $id, $src = '', $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_script_module( $module_id ) { - wp_script_modules()->dequeue( $module_id ); +function wp_dequeue_script_module( $id ) { + wp_script_modules()->dequeue( $id ); } From 9104cc2134b459d29ed3597c42cc16b63486295a Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 16 Jan 2024 11:13:21 +0100 Subject: [PATCH 3/7] Rename tests --- .../tests/script-modules/wpScriptModules.php | 500 +++++++++--------- 1 file changed, 248 insertions(+), 252 deletions(-) diff --git a/tests/phpunit/tests/script-modules/wpScriptModules.php b/tests/phpunit/tests/script-modules/wpScriptModules.php index 2c82b592caacf..89821e8f0b41a 100644 --- a/tests/phpunit/tests/script-modules/wpScriptModules.php +++ b/tests/phpunit/tests/script-modules/wpScriptModules.php @@ -17,169 +17,163 @@ class Tests_WP_Script_Modules extends WP_UnitTestCase { * * @var WP_Script_Modules */ - protected $modules; + protected $script_modules; /** * Set up. */ public function set_up() { parent::set_up(); - $this->modules = new WP_Script_Modules(); + $this->script_modules = new WP_Script_Modules(); } /** - * Gets a list of the enqueued modules. + * Gets a list of the enqueued script modules. * - * @return array Enqueued module URLs, keyed by module identifier. + * @return array Enqueued script module URLs, keyed by script module identifier. */ - public function get_enqueued_modules() { - $modules_markup = get_echo( array( $this->modules, 'print_enqueued_modules' ) ); - $p = new WP_HTML_Tag_Processor( $modules_markup ); - $enqueued_modules = array(); - - while ( $p->next_tag( - array( - 'tag' => 'SCRIPT', - 'import' => 'module', - ) - ) ) { - $id = preg_replace( '/-js-module$/', '', $p->get_attribute( 'id' ) ); - $enqueued_modules[ $id ] = $p->get_attribute( 'src' ); + public function get_enqueued_script_modules() { + $script_modules_markup = get_echo( array( $this->script_modules, 'print_enqueued_script_modules' ) ); + $p = new WP_HTML_Tag_Processor( $script_modules_markup ); + $enqueued_script_modules = array(); + + while ( $p->next_tag( array( 'tag' => 'SCRIPT' ) ) ) { + if ( 'module' === $p->get_attribute( 'type' ) ) { + $id = preg_replace( '/-js-module$/', '', $p->get_attribute( 'id' ) ); + $enqueued_script_modules[ $id ] = $p->get_attribute( 'src' ); + } } - return $enqueued_modules; + return $enqueued_script_modules; } /** - * Gets the modules listed in the import map. + * Gets the script modules listed in the import map. * - * @return array Import map entry URLs, keyed by module identifier. + * @return array Import map entry URLs, keyed by script module identifier. */ public function get_import_map() { - $import_map_markup = get_echo( array( $this->modules, 'print_import_map' ) ); + $import_map_markup = get_echo( array( $this->script_modules, 'print_import_map' ) ); preg_match( '/