From 940d2395a3bd7bcd9e8232f2a69863033476dd8b Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 12 Sep 2023 20:04:38 +0200 Subject: [PATCH 01/11] Install new GB packages to simulate sync --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1e9f58c731275..47a0f69246652 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@wordpress/blob": "3.35.1", "@wordpress/block-directory": "4.12.17", "@wordpress/block-editor": "12.3.14", - "@wordpress/block-library": "8.12.17", + "@wordpress/block-library": "8.18.0", "@wordpress/block-serialization-default-parser": "4.35.1", "@wordpress/blocks": "12.12.7", "@wordpress/commands": "0.6.12", @@ -111,6 +111,7 @@ "@wordpress/html-entities": "3.35.1", "@wordpress/i18n": "4.35.1", "@wordpress/icons": "9.26.2", + "@wordpress/interactivity": "2.2.0", "@wordpress/interface": "5.12.11", "@wordpress/is-shallow-equal": "4.35.1", "@wordpress/keyboard-shortcuts": "4.12.5", From d6b4cfad0caaef9fa4d2ccb969dd0088c0088a0c Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 12 Sep 2023 20:05:11 +0200 Subject: [PATCH 02/11] Update Webpack config to bundle the Interactivity API privately --- tools/webpack/blocks.js | 67 +++++++++++++++++++++++++++++++++++---- tools/webpack/packages.js | 2 +- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index df2a78abe81a9..f8f28c262db84 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -65,15 +65,69 @@ module.exports = function( env = { environment: 'production', watch: false, buil const config = { ...baseConfig( env ), entry: { - 'file/view': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/file/view` ), - 'navigation/view': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/navigation/view` ), - 'navigation/view-modal': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/navigation/view-modal` ), - 'search/view': normalizeJoin(baseDir, `node_modules/@wordpress/block-library/build-module/search/view` ), + // TODO before merging: + // - Rename to the final filenames, which should all be `view` and not `view-interactivity`. + // - Add the Search block file. + 'navigation/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/navigation/view-interactivity' ), + 'image/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/image/view-interactivity' ), + 'query/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/query/view' ), + 'file/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/file/view-interactivity' ), }, output: { devtoolNamespace: 'wp', - filename: `[name]${ suffix }.js`, - path: normalizeJoin(baseDir, `${ buildTarget }/blocks` ), + filename: `./blocks/[name]${ suffix }.js`, + path: normalizeJoin( baseDir, buildTarget ), + // TODO before merging: Remove this? + chunkLoadingGlobal: '__WordPressCorePrivateInteractivityAPI__', + }, + resolve: { + alias: { + '@wordpress/interactivity': normalizeJoin( baseDir, 'node_modules/@wordpress/interactivity/src/index.js' ), + }, + }, + optimization: { + ...baseConfig.optimization, + runtimeChunk: { + name: 'private-interactivity', + }, + splitChunks: { + cacheGroups: { + interactivity: { + name: 'private-interactivity', + test: /^(?!.*[\\/]block-library[\\/]).*$/, + filename: `./js/dist/interactivity${suffix}.js`, + chunks: 'all', + minSize: 0, + priority: -10, + }, + }, + }, + }, + module: { + rules: [ + { + test: /\.(j|t)sx?$/, + use: [ + { + loader: require.resolve( 'babel-loader' ), + options: { + cacheDirectory: process.env.BABEL_CACHE_DIRECTORY || true, + babelrc: false, + configFile: false, + presets: [ + [ + '@babel/preset-react', + { + runtime: 'automatic', + importSource: 'preact', + }, + ], + ], + }, + }, + ], + }, + ], }, plugins: [ new DefinePlugin( { @@ -85,6 +139,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil } ), new DependencyExtractionPlugin( { injectPolyfill: false, + useDefaults: false, } ), new CopyWebpackPlugin( { patterns: [ diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index 90c4f8deff407..65747bdf8e2ba 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -53,7 +53,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil buildTarget = buildTarget + '/wp-includes'; const WORDPRESS_NAMESPACE = '@wordpress/'; - const BUNDLED_PACKAGES = [ '@wordpress/icons', '@wordpress/interface' ]; + const BUNDLED_PACKAGES = [ '@wordpress/icons', '@wordpress/interface', '@wordpress/interactivity' ]; const packages = Object.keys( dependencies ) .filter( ( packageName ) => ! BUNDLED_PACKAGES.includes( packageName ) && From 1f59ead19341b289b6c7797cce07c9e044776a2a Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Thu, 14 Sep 2023 23:21:45 +0200 Subject: [PATCH 03/11] Register wp-interactivity using webpack hash for version --- src/wp-includes/script-loader.php | 29 +++++++++++++++++++++++++++++ tools/webpack/blocks.js | 18 ++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index d99cc9b035d8b..84368dc71901f 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -258,6 +258,34 @@ function wp_register_development_scripts( $scripts ) { $scripts->registered['react']->deps[] = 'wp-react-refresh-entry'; } +/** + * Registers extra scripts that are not registered through the DependencyExtractionPlugin. + * + * @since 6.4.0 + * + * @param WP_Scripts $scripts WP_Scripts object. + */ +function wp_register_extra_scripts( $scripts ) { + $suffix = defined( 'WP_RUN_CORE_TESTS' ) ? '.min' : wp_scripts_get_suffix(); + + $extra_scripts = array( + 'interactivity' + ); + + foreach ( $extra_scripts as $script_name ) { + $assets = include ABSPATH . WPINC . '/assets/script-loader-' . $script_name . $suffix . '.php'; + if ( ! is_array( $assets ) ) { + return; + } + $scripts->add( + 'wp-' . $script_name, + '/wp-includes/js/dist/' . $script_name . $suffix . '.js', + $assets['dependencies'], + $assets['version'] + ); + } +} + /** * Registers all the WordPress packages scripts that are in the standardized * `js/dist/` location. @@ -655,6 +683,7 @@ function wp_tinymce_inline_scripts() { function wp_default_packages( $scripts ) { wp_default_packages_vendor( $scripts ); wp_register_development_scripts( $scripts ); + wp_register_extra_scripts( $scripts ); wp_register_tinymce_scripts( $scripts ); wp_default_packages_scripts( $scripts ); diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index f8f28c262db84..6c8f9e775d606 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -3,6 +3,7 @@ */ const { DefinePlugin } = require( 'webpack' ); const CopyWebpackPlugin = require( 'copy-webpack-plugin' ); +const { writeFileSync } = require( 'fs' ); /** * WordPress dependencies @@ -19,6 +20,22 @@ const { getStableBlocksMetadata, } = require( '../release/sync-stable-blocks' ); +class InteractivityAssetsPHP { + constructor( buildTarget, suffix ) { + this.buildTarget = buildTarget; + this.suffix = suffix; + } + + apply( compiler ) { + compiler.hooks.done.tap( 'Interactivity Script Loader', ( stats ) => { + const content = ` array(), 'version' => '${ stats.hash }' );`; + const filename = normalizeJoin( baseDir, this.buildTarget, './assets/script-loader-interactivity' ); + writeFileSync( `${ filename }.php`, content ); + if ( this.suffix ) writeFileSync( `${ filename }${ this.suffix }.php`, content ); + } ); + } +} + module.exports = function( env = { environment: 'production', watch: false, buildTarget: false } ) { const mode = env.environment; const suffix = mode === 'production' ? '.min' : ''; @@ -148,6 +165,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil ...blockStylesheetCopies, ], } ), + new InteractivityAssetsPHP( buildTarget, suffix ), ], }; From 6cf5224b7c6d5d585d342127cd0a70f66f42cd53 Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 09:56:07 +0200 Subject: [PATCH 04/11] Revert "Register wp-interactivity using webpack hash for version" This reverts commit 1f59ead19341b289b6c7797cce07c9e044776a2a. --- src/wp-includes/script-loader.php | 29 ----------------------------- tools/webpack/blocks.js | 18 ------------------ 2 files changed, 47 deletions(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 84368dc71901f..d99cc9b035d8b 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -258,34 +258,6 @@ function wp_register_development_scripts( $scripts ) { $scripts->registered['react']->deps[] = 'wp-react-refresh-entry'; } -/** - * Registers extra scripts that are not registered through the DependencyExtractionPlugin. - * - * @since 6.4.0 - * - * @param WP_Scripts $scripts WP_Scripts object. - */ -function wp_register_extra_scripts( $scripts ) { - $suffix = defined( 'WP_RUN_CORE_TESTS' ) ? '.min' : wp_scripts_get_suffix(); - - $extra_scripts = array( - 'interactivity' - ); - - foreach ( $extra_scripts as $script_name ) { - $assets = include ABSPATH . WPINC . '/assets/script-loader-' . $script_name . $suffix . '.php'; - if ( ! is_array( $assets ) ) { - return; - } - $scripts->add( - 'wp-' . $script_name, - '/wp-includes/js/dist/' . $script_name . $suffix . '.js', - $assets['dependencies'], - $assets['version'] - ); - } -} - /** * Registers all the WordPress packages scripts that are in the standardized * `js/dist/` location. @@ -683,7 +655,6 @@ function wp_tinymce_inline_scripts() { function wp_default_packages( $scripts ) { wp_default_packages_vendor( $scripts ); wp_register_development_scripts( $scripts ); - wp_register_extra_scripts( $scripts ); wp_register_tinymce_scripts( $scripts ); wp_default_packages_scripts( $scripts ); diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index 6c8f9e775d606..f8f28c262db84 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -3,7 +3,6 @@ */ const { DefinePlugin } = require( 'webpack' ); const CopyWebpackPlugin = require( 'copy-webpack-plugin' ); -const { writeFileSync } = require( 'fs' ); /** * WordPress dependencies @@ -20,22 +19,6 @@ const { getStableBlocksMetadata, } = require( '../release/sync-stable-blocks' ); -class InteractivityAssetsPHP { - constructor( buildTarget, suffix ) { - this.buildTarget = buildTarget; - this.suffix = suffix; - } - - apply( compiler ) { - compiler.hooks.done.tap( 'Interactivity Script Loader', ( stats ) => { - const content = ` array(), 'version' => '${ stats.hash }' );`; - const filename = normalizeJoin( baseDir, this.buildTarget, './assets/script-loader-interactivity' ); - writeFileSync( `${ filename }.php`, content ); - if ( this.suffix ) writeFileSync( `${ filename }${ this.suffix }.php`, content ); - } ); - } -} - module.exports = function( env = { environment: 'production', watch: false, buildTarget: false } ) { const mode = env.environment; const suffix = mode === 'production' ? '.min' : ''; @@ -165,7 +148,6 @@ module.exports = function( env = { environment: 'production', watch: false, buil ...blockStylesheetCopies, ], } ), - new InteractivityAssetsPHP( buildTarget, suffix ), ], }; From fe7b77f1445558bf3a188f06547a4824a030bace Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 10:16:08 +0200 Subject: [PATCH 05/11] Register the Interactivity API in PHP --- src/wp-includes/script-loader.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index d99cc9b035d8b..5fb7540130b9c 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -279,6 +279,9 @@ function wp_default_packages_scripts( $scripts ) { */ $assets = include ABSPATH . WPINC . "/assets/script-loader-packages{$suffix}.php"; + // Add the private version of the Interactivity API manually. + $assets["interactivity{$suffix}.js"] = array( 'dependencies' => array(), 'version' => '6.4.0' ); + foreach ( $assets as $file_name => $package_data ) { $basename = str_replace( $suffix . '.js', '', basename( $file_name ) ); $handle = 'wp-' . $basename; From c9e7bb1f770862631ae0a45a192b9279d0a754c9 Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 10:19:47 +0200 Subject: [PATCH 06/11] Rename all entry points and add search --- tools/webpack/blocks.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index f8f28c262db84..ff5600ccbd1e3 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -65,13 +65,11 @@ module.exports = function( env = { environment: 'production', watch: false, buil const config = { ...baseConfig( env ), entry: { - // TODO before merging: - // - Rename to the final filenames, which should all be `view` and not `view-interactivity`. - // - Add the Search block file. - 'navigation/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/navigation/view-interactivity' ), - 'image/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/image/view-interactivity' ), + 'navigation/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/navigation/view' ), + 'image/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/image/view' ), 'query/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/query/view' ), - 'file/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/file/view-interactivity' ), + 'file/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/file/view' ), + 'search/view': normalizeJoin( baseDir, 'node_modules/@wordpress/block-library/build-module/file/view' ), }, output: { devtoolNamespace: 'wp', From 2ba3462e17271fd4ff4feeb4aaf9133da65e46d0 Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 10:22:33 +0200 Subject: [PATCH 07/11] Fix coding standards --- src/wp-includes/script-loader.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 5fb7540130b9c..3e2047003730e 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -280,7 +280,10 @@ function wp_default_packages_scripts( $scripts ) { $assets = include ABSPATH . WPINC . "/assets/script-loader-packages{$suffix}.php"; // Add the private version of the Interactivity API manually. - $assets["interactivity{$suffix}.js"] = array( 'dependencies' => array(), 'version' => '6.4.0' ); + $assets[ "interactivity{$suffix}.js" ] = array( + 'dependencies' => array(), + 'version' => '6.4.0' + ); foreach ( $assets as $file_name => $package_data ) { $basename = str_replace( $suffix . '.js', '', basename( $file_name ) ); From d38786930b23f56d03510ed4468bc578037864e5 Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 12:20:08 +0200 Subject: [PATCH 08/11] Randomize chunk global --- tools/webpack/blocks.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index ff5600ccbd1e3..3cb8b6c059e35 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -75,8 +75,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil devtoolNamespace: 'wp', filename: `./blocks/[name]${ suffix }.js`, path: normalizeJoin( baseDir, buildTarget ), - // TODO before merging: Remove this? - chunkLoadingGlobal: '__WordPressCorePrivateInteractivityAPI__', + chunkLoadingGlobal: `__WordPressPrivateInteractivityAPI_${Math.floor(Math.random() * 1000)}__`, }, resolve: { alias: { From 4c696dcadcdc868822e54bb88003985f18a0752a Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 12:58:11 +0200 Subject: [PATCH 09/11] Fix coding standards --- src/wp-includes/script-loader.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 3e2047003730e..a0651ab6b16b9 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -282,7 +282,7 @@ function wp_default_packages_scripts( $scripts ) { // Add the private version of the Interactivity API manually. $assets[ "interactivity{$suffix}.js" ] = array( 'dependencies' => array(), - 'version' => '6.4.0' + 'version' => '6.4.0', ); foreach ( $assets as $file_name => $package_data ) { @@ -663,6 +663,7 @@ function wp_default_packages( $scripts ) { wp_register_development_scripts( $scripts ); wp_register_tinymce_scripts( $scripts ); wp_default_packages_scripts( $scripts ); + wp_register_interactivity_dependencies( $scripts ); if ( did_action( 'init' ) ) { wp_default_packages_inline_scripts( $scripts ); From 020a86ab151822360f4e47fd4fe1f91bc3b85cc1 Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 12:59:36 +0200 Subject: [PATCH 10/11] Fix cs and remove unnecessary line --- src/wp-includes/script-loader.php | 1 - tools/webpack/blocks.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index a0651ab6b16b9..d1059a26c7cb7 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -663,7 +663,6 @@ function wp_default_packages( $scripts ) { wp_register_development_scripts( $scripts ); wp_register_tinymce_scripts( $scripts ); wp_default_packages_scripts( $scripts ); - wp_register_interactivity_dependencies( $scripts ); if ( did_action( 'init' ) ) { wp_default_packages_inline_scripts( $scripts ); diff --git a/tools/webpack/blocks.js b/tools/webpack/blocks.js index 3cb8b6c059e35..4c1fcae1432a2 100644 --- a/tools/webpack/blocks.js +++ b/tools/webpack/blocks.js @@ -75,7 +75,7 @@ module.exports = function( env = { environment: 'production', watch: false, buil devtoolNamespace: 'wp', filename: `./blocks/[name]${ suffix }.js`, path: normalizeJoin( baseDir, buildTarget ), - chunkLoadingGlobal: `__WordPressPrivateInteractivityAPI_${Math.floor(Math.random() * 1000)}__`, + chunkLoadingGlobal: `__WordPressPrivateInteractivityAPI_${ Math.floor( Math.random() * 1000 ) }__`, }, resolve: { alias: { From daca7f4902da198adf3cbae925c69eb3ae78eb52 Mon Sep 17 00:00:00 2001 From: Luis Herranz Date: Tue, 19 Sep 2023 13:37:33 +0200 Subject: [PATCH 11/11] Revert "Install new GB packages to simulate sync" This reverts commit 940d2395a3bd7bcd9e8232f2a69863033476dd8b. --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 47a0f69246652..1e9f58c731275 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@wordpress/blob": "3.35.1", "@wordpress/block-directory": "4.12.17", "@wordpress/block-editor": "12.3.14", - "@wordpress/block-library": "8.18.0", + "@wordpress/block-library": "8.12.17", "@wordpress/block-serialization-default-parser": "4.35.1", "@wordpress/blocks": "12.12.7", "@wordpress/commands": "0.6.12", @@ -111,7 +111,6 @@ "@wordpress/html-entities": "3.35.1", "@wordpress/i18n": "4.35.1", "@wordpress/icons": "9.26.2", - "@wordpress/interactivity": "2.2.0", "@wordpress/interface": "5.12.11", "@wordpress/is-shallow-equal": "4.35.1", "@wordpress/keyboard-shortcuts": "4.12.5",