Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

core-js: only polyfill stable features #57674

Merged
merged 7 commits into from Jan 24, 2024
Merged

core-js: only polyfill stable features #57674

merged 7 commits into from Jan 24, 2024

Conversation

swissspidy
Copy link
Member

@swissspidy swissspidy commented Jan 9, 2024

What?

Fixes #57247 by ensuring only stable features are polyfilled.

Updates browserslist and core-js to the latest versions.

Polyfill size decreases from 380kB to just 125KB 🎉 🚀

The following polyfills are now included:

$ npm run build

> @wordpress/babel-preset-default@7.33.0 build
> node ./bin/index.js

bundling ./build/polyfill.js, size: 125.82KB
bundling ./build/polyfill.js, modules:
es.array.push for {"android":"120","chrome":"109","chrome-android":"120","edge":"119","opera":"105","opera-android":"73","samsung":"23"}
es.array.to-reversed for {"chrome":"109","opera-android":"73"}
es.array.to-sorted for {"chrome":"109","opera-android":"73"}
es.array.to-spliced for {"chrome":"109","opera-android":"73"}
es.array.with for {"chrome":"109","opera-android":"73"}
es.map.group-by for {"chrome":"109","ios":"16.6-16.7","opera-android":"73","safari":"17.1","samsung":"23"}
es.object.group-by for {"chrome":"109","ios":"16.6-16.7","opera-android":"73","safari":"17.1","samsung":"23"}
es.promise.with-resolvers for {"chrome":"109","firefox":"120","ios":"16.6-16.7","opera-android":"73","safari":"17.1","samsung":"23"}
es.regexp.flags for {"chrome":"109","opera-android":"73"}
es.string.is-well-formed for {"chrome":"109","opera-android":"73"}
es.string.to-well-formed for {"chrome":"109","opera-android":"73"}
es.typed-array.to-reversed for {"chrome":"109","opera-android":"73"}
es.typed-array.to-sorted for {"chrome":"109","opera-android":"73"}
es.typed-array.with for {"chrome":"109","opera-android":"73"}
web.dom-exception.stack for {"android":"120","chrome":"109","chrome-android":"120","edge":"119","ios":"16.6-16.7","opera":"105","opera-android":"73","safari":"17.1","samsung":"23"}
web.structured-clone for {"android":"120","chrome":"109","chrome-android":"120","edge":"119","firefox":"120","ios":"16.6-16.7","opera":"105","opera-android":"73","safari":"17.1","samsung":"23"}
web.url.can-parse for {"chrome":"109","edge":"119","ios":"16.6-16.7","opera":"105","opera-android":"73","samsung":"23"}
web.url-search-params.delete for {"chrome":"109","ios":"16.6-16.7","opera-android":"73","samsung":"23"}
web.url-search-params.has for {"chrome":"109","ios":"16.6-16.7","opera-android":"73","samsung":"23"}
web.url-search-params.size for {"chrome":"109","ios":"16.6-16.7","opera-android":"73"}

Why?

Addresses a performance concern for heavy usage of JSON for cloning data.

How?

Exclude the polyfill that's causing this

Testing Instructions

TODO

@swissspidy swissspidy added the [Package] Babel preset /packages/babel-preset-default label Jan 9, 2024
@swissspidy swissspidy added the [Type] Bug An existing feature does not function as intended label Jan 9, 2024
Copy link

github-actions bot commented Jan 9, 2024

Size Change: 0 B

Total Size: 1.69 MB

ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.69 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.22 kB
build/block-directory/style-rtl.css 1.02 kB
build/block-directory/style.css 1.02 kB
build/block-editor/content-rtl.css 4.38 kB
build/block-editor/content.css 4.38 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 B
build/block-editor/index.min.js 249 kB
build/block-editor/style-rtl.css 15.3 kB
build/block-editor/style.css 15.3 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.69 kB
build/block-library/blocks/cover/style.css 1.68 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 316 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 227 B
build/block-library/blocks/form-input/editor.css 227 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/image/view.min.js 2.01 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.25 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.24 kB
build/block-library/blocks/navigation/style.css 2.23 kB
build/block-library/blocks/navigation/view.min.js 1.1 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-featured-image/style-rtl.css 342 B
build/block-library/blocks/post-featured-image/style.css 342 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 354 B
build/block-library/blocks/pullquote/style.css 354 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 312 B
build/block-library/blocks/query/style.css 308 B
build/block-library/blocks/query/view.min.js 642 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 614 B
build/block-library/blocks/search/style.css 614 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 471 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.49 kB
build/block-library/blocks/social-links/style.css 1.49 kB
build/block-library/blocks/spacer/editor-rtl.css 348 B
build/block-library/blocks/spacer/editor.css 348 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.3 kB
build/block-library/editor.css 12.3 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 214 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.7 kB
build/block-library/theme-rtl.css 688 B
build/block-library/theme.css 693 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.4 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 921 B
build/commands/style.css 918 B
build/components/index.min.js 235 kB
build/components/style-rtl.css 12 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.6 kB
build/core-commands/index.min.js 2.71 kB
build/core-data/index.min.js 72.7 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.34 kB
build/customize-widgets/style.css 1.33 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.92 kB
build/date/index.min.js 17.8 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-post/index.min.js 25 kB
build/edit-post/style-rtl.css 5.62 kB
build/edit-post/style.css 5.61 kB
build/edit-site/index.min.js 195 kB
build/edit-site/style-rtl.css 15.2 kB
build/edit-site/style.css 15.2 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.39 kB
build/edit-widgets/style.css 4.39 kB
build/editor/index.min.js 61.4 kB
build/editor/style-rtl.css 5.43 kB
build/editor/style.css 5.43 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.93 kB
build/format-library/style-rtl.css 478 B
build/format-library/style.css 477 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/file.min.js 440 B
build/interactivity/image.min.js 2.15 kB
build/interactivity/index.min.js 13.3 kB
build/interactivity/navigation.min.js 1.23 kB
build/interactivity/query.min.js 789 B
build/interactivity/search.min.js 610 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.74 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 836 B
build/list-reusable-blocks/style.css 836 B
build/media-utils/index.min.js 2.9 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 2 kB
build/nux/style-rtl.css 735 B
build/nux/style.css 732 B
build/patterns/index.min.js 5.45 kB
build/patterns/style-rtl.css 540 B
build/patterns/style.css 539 B
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 2.07 kB
build/preferences/index.min.js 2.81 kB
build/preferences/style-rtl.css 698 B
build/preferences/style.css 700 B
build/primitives/index.min.js 975 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.72 kB
build/reusable-blocks/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/rich-text/index.min.js 10.4 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.95 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.05 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.72 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@gziolo
Copy link
Member

gziolo commented Jan 9, 2024

I would have to double check but I have the impression that we have always discussed supporting only stage 4 proposals in WordPress core. If that’s true then we should definitely get rid of stage 3 and lower from the bundle.

Copy link

@zloirock zloirock left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This config is confusing.

  • modules: [ 'es', 'web' ], - it does not exclude anything since esnext also starts from es. That means that even stage 0 proposals are included - it's too dangerous. Use es. or a regex. It's too common issue and similar patterns will be disallowed in the next major release in favor of regexes or full module names.
  • I strongly don't recommend excluding 'es.promise' pattern:
    • That also excludes other modules that start from es.promise - like in the case above - for example, polyfills for modern features like Promise.any, Promise.withResolvers, Promise#finally, etc. excluded from the bundle.
    • Only tenths of a percent of actually used browser Promise implementations (Chrome < 67, FF < 69, Safari < 11) fails the core-js Promise feature detection and current core-js Promise implementation with proper usage should not cause any problems. Could you explain why this exclusion is required?

@swissspidy
Copy link
Member Author

  • modules: [ 'es', 'web' ], - it does not exclude anything since esnext also starts from es.

I don't think it works that way. Here es is the namespace / group, not a regex.

@zloirock
Copy link

@swissspidy I know how it works since I wrote it, see this line -) And yes, as I wrote - it's confusing and in v4 it will be replaced with more obvious logic.

@swissspidy
Copy link
Member Author

Haha whoops, never mind then :D

@jsnajdr
Copy link
Member

jsnajdr commented Jan 24, 2024

I played with the build config for a while and this is what I arrived at:

modules: [ 'es.', 'web.' ],
exclude: [ 'web.immediate' ],
summary: { console: { size: true, modules: true } },
  1. Our previous config, and also the default config (when you don't specify modules or exclude), bundle some 180 esnext.* modules that we don't need: these are experimental proposals at various stages, but we want to support only the stable things that are in a published standard. When we declare that we want only es. modules, there are only 12 that are needed according to the list of supported browsers specified as targets.

  2. Nowadays we don't bundle es.promise at all, even if not explicitly excluded. Apparently all our supported browsers have full support for standard promises and don't need to polyfill anything.

  3. If we don't bundle esnext.*, it automatically excludes the JSON source access polyfill, too, we don't need to exclude it explicitly.

  4. The only thing we need to exclude explicitly is web.immediate.

  5. The summary config field enables a very nice report about what modules are included and why, and logs the size of the built polyfill. Let's add it to the config permanently.

The result of esnext.* exclusion is that the polyfill size goes from 380kB to just 120kB, and contains only 18 modules:

bundling ./build/polyfill.js, size: 118.96KB
bundling ./build/polyfill.js, modules:
es.array.push for {"android":"117","chrome":"109","chrome-android":"117","edge":"115","ios":"15.6-15.7","opera":"101"}
es.array.to-reversed for {"chrome":"109","ios":"15.6-15.7"}
es.array.to-sorted for {"chrome":"109","ios":"15.6-15.7"}
es.array.to-spliced for {"chrome":"109","ios":"15.6-15.7"}
es.array.unshift for {"ios":"15.6-15.7"}
es.array.with for {"chrome":"109","ios":"15.6-15.7"}
es.regexp.flags for {"chrome":"109"}
es.string.is-well-formed for {"chrome":"109","firefox":"116","ios":"15.6-15.7"}
es.string.to-well-formed for {"chrome":"109","firefox":"116","ios":"15.6-15.7"}
es.typed-array.to-reversed for {"chrome":"109","ios":"15.6-15.7"}
es.typed-array.to-sorted for {"chrome":"109","ios":"15.6-15.7"}
es.typed-array.with for {"chrome":"109","ios":"15.6-15.7"}
web.dom-exception.stack for {"android":"117","chrome":"109","chrome-android":"117","edge":"115","ios":"15.6-15.7","opera":"101","safari":"16.5"}
web.structured-clone for {"android":"117","chrome":"109","chrome-android":"117","edge":"115","firefox":"116","ios":"15.6-15.7","opera":"101","safari":"16.5"}
web.url.can-parse for {"android":"117","chrome":"109","chrome-android":"117","edge":"115","ios":"15.6-15.7","opera":"101","safari":"16.5"}
web.url-search-params.delete for {"android":"117","chrome":"109","chrome-android":"117","edge":"115","ios":"15.6-15.7","opera":"101","safari":"16.5"}
web.url-search-params.has for {"android":"117","chrome":"109","chrome-android":"117","edge":"115","ios":"15.6-15.7","opera":"101","safari":"16.5"}
web.url-search-params.size for {"chrome":"109","ios":"15.6-15.7","safari":"16.5"}

My main assumption here is that es.* modules are stable features in a published standard, and that esnext.* are unstable features at various stages of the TC39 process. If that's not always true, we need to reconsider.

@swissspidy
Copy link
Member Author

Neat, thanks for the detailed analysis!

5. The summary config field enables a very nice report about what modules are included and why, and logs the size of the built polyfill. Let's add it to the config permanently.

That sounds interesting! I just added this, but how can I see this output when I do a npm run build?

@jsnajdr
Copy link
Member

jsnajdr commented Jan 24, 2024

I just added this, but how can I see this output when I do a npm run build?

For me it just worked. I added summary to the bin/index.js script, cd-ed to the packages/babel-preset-default directory, ran npm run build, and I saw the console output that I copy&pasted in the above comment.

@zloirock
Copy link

zloirock commented Jan 24, 2024

My main assumption here is that es.* modules are stable features in a published standard, and that esnext.* are unstable features at various stages of the TC39 process. If that's not always true, we need to reconsider.

After moving proposals to stable ES, core-js add es. entries (and left esnext. as symlinks for backward compatibility), so in your case it's always true.

@zloirock
Copy link

Note that in modules option you could use entries that will be expanded to modules. For example, core-js/stable means all stable ES and web standards (it's what's you doing now), core-js/actual also adds stage 3 proposals.

@zloirock
Copy link

In your output some moments confuse me - here missed polyfill for some modern features - like es.object.group-by, es.promise.with-resolvers, es.map.group-by - it looks like you are using obsolete core-js-builder version.

Copy link

github-actions bot commented Jan 24, 2024

Flaky tests detected in 12b8001.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/7640799857
📝 Reported issues:

@jsnajdr
Copy link
Member

jsnajdr commented Jan 24, 2024

it looks like you are using obsolete core-js-builder version.

That's true, after update of core-js-compat the build is a bit different:

  • es.array.unshift disappeared
  • es.map.group-by, es.object.group-by and es.promise.with-resolvers appeared

That's nice, even es.promise.with-resolvers, we want to polyfill brand new methods that are not yet supported everywhere.

Copy link
Member

@jsnajdr jsnajdr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is good to go now 👍

package-lock.json Outdated Show resolved Hide resolved
@jsnajdr
Copy link
Member

jsnajdr commented Jan 24, 2024

Thanks, now the lockfile looks much better. Only upgrades existing packages and doesn't add any duplicates.

@swissspidy swissspidy changed the title core-js: try exclude json polyfill core-js: only polyfill stable features Jan 24, 2024
@swissspidy swissspidy merged commit f1f7afc into trunk Jan 24, 2024
55 of 56 checks passed
@swissspidy swissspidy deleted the try/57247-core-js branch January 24, 2024 13:56
@github-actions github-actions bot added this to the Gutenberg 17.6 milestone Jan 24, 2024
@zloirock
Copy link

That's nice, even es.promise.with-resolvers, we want to polyfill brand new methods that are not yet supported everywhere.

If you wanna polyfill "brand new methods" it's better take a look at stage 3 proposals. Stage 4 (stable ES) can be accepted only if a feature is implemented in 2 from 3 actual browser JS engines. Stage 3 is a flag that feature could be implemented in engines and almost all actual stage 3 proposals has at least one browser implementation.

New Set methods, Iterator helpers, Array.fromAsync and many other features already available in some browsers, enough stable for usage and significantly improve DX.

However, if your policy strictly define "stable JS only" - it's your choice -)

@jsnajdr
Copy link
Member

jsnajdr commented Jan 25, 2024

However, if your policy strictly define "stable JS only" - it's your choice -)

Yes, we indeed have a conservative policy to use only stable ES featues 🙂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Babel preset /packages/babel-preset-default [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Performance issue in Object Cloning using JSON.parse(JSON.stringify()) on Safari and Firefox
4 participants