diff --git a/Gruntfile.js b/Gruntfile.js index a892ebb003..b6aa58080f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1246,9 +1246,6 @@ module.exports = function(grunt) { * Update any non-@wordpress deps to the same version as required in the @wordpress packages (e.g. react 16 -> 17). */ grunt.task.run( 'wp-packages:refresh-deps' ); - - // Build the files stored in the src/ directory. - grunt.task.run( 'build' ); } ); grunt.renameTask( 'watch', '_watch' ); @@ -1698,6 +1695,12 @@ module.exports = function(grunt) { } ); } ); + grunt.registerTask( 'wp-packages:sync-stable-blocks', 'Refresh the PHP files referring to stable @wordpress/block-library blocks.', function() { + grunt.log.writeln( `Syncing stable blocks from @wordpress/block-library to src/` ); + const { main } = require( './tools/release/sync-stable-blocks' ); + main(); + } ); + // Patch task. grunt.renameTask('patch_wordpress', 'patch'); diff --git a/package.json b/package.json index 4ff2af56f3..de1c4ba4ed 100644 --- a/package.json +++ b/package.json @@ -175,6 +175,7 @@ "test:php": "node ./tools/local-env/scripts/docker.js run -T php composer update -W && node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit", "test:e2e": "node ./tests/e2e/run-tests.js", "test:visual": "node ./tests/visual-regression/run-tests.js", - "sync-gutenberg-packages": "grunt sync-gutenberg-packages --dev" + "sync-gutenberg-packages": "grunt sync-gutenberg-packages", + "postsync-gutenberg-packages": "grunt wp-packages:sync-stable-blocks && grunt build --dev && grunt build" } } diff --git a/src/wp-includes/blocks/index.php b/src/wp-includes/blocks/index.php index 396f8d82b9..e372a74a48 100644 --- a/src/wp-includes/blocks/index.php +++ b/src/wp-includes/blocks/index.php @@ -5,68 +5,12 @@ * @package WordPress */ +define( 'BLOCKS_PATH', ABSPATH . WPINC . '/blocks/' ); + // Include files required for core blocks registration. -require ABSPATH . WPINC . '/blocks/archives.php'; -require ABSPATH . WPINC . '/blocks/avatar.php'; -require ABSPATH . WPINC . '/blocks/block.php'; -require ABSPATH . WPINC . '/blocks/calendar.php'; -require ABSPATH . WPINC . '/blocks/categories.php'; -require ABSPATH . WPINC . '/blocks/comment-author-name.php'; -require ABSPATH . WPINC . '/blocks/comment-content.php'; -require ABSPATH . WPINC . '/blocks/comment-date.php'; -require ABSPATH . WPINC . '/blocks/comment-edit-link.php'; -require ABSPATH . WPINC . '/blocks/comment-reply-link.php'; -require ABSPATH . WPINC . '/blocks/comment-template.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination-next.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination-numbers.php'; -require ABSPATH . WPINC . '/blocks/comments-pagination-previous.php'; -require ABSPATH . WPINC . '/blocks/comments-title.php'; -require ABSPATH . WPINC . '/blocks/cover.php'; -require ABSPATH . WPINC . '/blocks/file.php'; -require ABSPATH . WPINC . '/blocks/gallery.php'; -require ABSPATH . WPINC . '/blocks/home-link.php'; -require ABSPATH . WPINC . '/blocks/image.php'; -require ABSPATH . WPINC . '/blocks/latest-comments.php'; -require ABSPATH . WPINC . '/blocks/latest-posts.php'; -require ABSPATH . WPINC . '/blocks/legacy-widget.php'; -require ABSPATH . WPINC . '/blocks/loginout.php'; -require ABSPATH . WPINC . '/blocks/navigation.php'; -require ABSPATH . WPINC . '/blocks/navigation-link.php'; -require ABSPATH . WPINC . '/blocks/navigation-submenu.php'; -require ABSPATH . WPINC . '/blocks/page-list.php'; -require ABSPATH . WPINC . '/blocks/pattern.php'; -require ABSPATH . WPINC . '/blocks/post-author.php'; -require ABSPATH . WPINC . '/blocks/post-author-biography.php'; -require ABSPATH . WPINC . '/blocks/post-comments.php'; -require ABSPATH . WPINC . '/blocks/post-comments-form.php'; -require ABSPATH . WPINC . '/blocks/post-content.php'; -require ABSPATH . WPINC . '/blocks/post-date.php'; -require ABSPATH . WPINC . '/blocks/post-excerpt.php'; -require ABSPATH . WPINC . '/blocks/post-featured-image.php'; -require ABSPATH . WPINC . '/blocks/post-navigation-link.php'; -require ABSPATH . WPINC . '/blocks/post-template.php'; -require ABSPATH . WPINC . '/blocks/post-terms.php'; -require ABSPATH . WPINC . '/blocks/post-title.php'; -require ABSPATH . WPINC . '/blocks/query.php'; -require ABSPATH . WPINC . '/blocks/query-no-results.php'; -require ABSPATH . WPINC . '/blocks/query-pagination.php'; -require ABSPATH . WPINC . '/blocks/query-pagination-next.php'; -require ABSPATH . WPINC . '/blocks/query-pagination-numbers.php'; -require ABSPATH . WPINC . '/blocks/query-pagination-previous.php'; -require ABSPATH . WPINC . '/blocks/query-title.php'; -require ABSPATH . WPINC . '/blocks/read-more.php'; -require ABSPATH . WPINC . '/blocks/rss.php'; -require ABSPATH . WPINC . '/blocks/search.php'; -require ABSPATH . WPINC . '/blocks/shortcode.php'; -require ABSPATH . WPINC . '/blocks/site-logo.php'; -require ABSPATH . WPINC . '/blocks/site-tagline.php'; -require ABSPATH . WPINC . '/blocks/site-title.php'; -require ABSPATH . WPINC . '/blocks/social-link.php'; -require ABSPATH . WPINC . '/blocks/tag-cloud.php'; -require ABSPATH . WPINC . '/blocks/template-part.php'; -require ABSPATH . WPINC . '/blocks/term-description.php'; -require ABSPATH . WPINC . '/blocks/widget-group.php'; +require BLOCKS_PATH . 'legacy-widget.php'; +require BLOCKS_PATH . 'widget-group.php'; +require BLOCKS_PATH . 'require-dynamic-blocks.php'; /** * Registers core block types using metadata files. @@ -75,40 +19,10 @@ require ABSPATH . WPINC . '/blocks/widget-group.php'; * @since 5.5.0 */ function register_core_block_types_from_metadata() { - $block_folders = array( - 'audio', - 'button', - 'buttons', - 'code', - 'column', - 'columns', - 'comments-query-loop', - 'embed', - 'freeform', - 'group', - 'heading', - 'html', - 'list', - 'media-text', - 'missing', - 'more', - 'nextpage', - 'paragraph', - 'preformatted', - 'pullquote', - 'quote', - 'separator', - 'social-links', - 'spacer', - 'table', - 'text-columns', - 'verse', - 'video', - ); - + $block_folders = require BLOCKS_PATH . 'require-static-blocks.php'; foreach ( $block_folders as $block_folder ) { register_block_type( - ABSPATH . WPINC . '/blocks/' . $block_folder + BLOCKS_PATH . $block_folder ); } } diff --git a/src/wp-includes/blocks/require-dynamic-blocks.php b/src/wp-includes/blocks/require-dynamic-blocks.php new file mode 100644 index 0000000000..bcffcaafc0 --- /dev/null +++ b/src/wp-includes/blocks/require-dynamic-blocks.php @@ -0,0 +1,63 @@ + ! isDynamic( metadata ) ) + .map( toDirectoryName ) + .sort() + // To the block folder name statement: + .map( dirname => ` '${ dirname }',` ) + .join( "\n" ); + + fs.writeFileSync( + `${ REPOSITORY_ROOT }/src/wp-includes/blocks/require-static-blocks.php`, + ` `require ABSPATH . WPINC . '/blocks/${ dirname }.php';` ) + .join( "\n" ); + + fs.writeFileSync( + `${ REPOSITORY_ROOT }/src/wp-includes/blocks/require-dynamic-blocks.php`, + ` path.join( BLOCK_LIBRARY_SRC, dirMaybe, 'block.json' ) ) + .filter( fs.existsSync ) + .map( blockJsonPath => ( { + ...JSON.parse( fs.readFileSync( blockJsonPath ) ), + path: blockJsonPath, + } ) ) + .filter( metadata => ( + !( '__experimental' in metadata ) || metadata.__experimental === false + ) ) + ); +} + +/** + * Returns true if the specified metadata refers to a dynamic block. + * + * @param {Object} metadata Block metadata in question. + * @return {boolean} Is it a dynamic block? + */ +function isDynamic( metadata ) { + return ( + fs.existsSync( path.join( metadata.path, '..', 'index.php' ) ) + ); +} + +/** + * Returns a name of the directory where a given block resides. + * + * @param {Object} metadata Block metadata in question. + * @return {string} Parent directory name. + */ +function toDirectoryName( metadata ) { + return ( + path.basename( path.dirname( metadata.path ) ) + ); +} + +module.exports = { + main, + isDynamic, + toDirectoryName, + getStableBlocksMetadata, +}; + +/* eslint-enable no-console */