Skip to content

Testing: Remove custom import resolvers and package subpath syntax rules#72978

Merged
aduth merged 13 commits intotrunkfrom
remove/eslint-custom-resolve
Dec 4, 2025
Merged

Testing: Remove custom import resolvers and package subpath syntax rules#72978
aduth merged 13 commits intotrunkfrom
remove/eslint-custom-resolve

Conversation

@aduth
Copy link
Copy Markdown
Member

@aduth aduth commented Nov 4, 2025

What?

Updates lint configuration to remove redundant import resolvers and syntax rules.

Follow-up to #72893

Why?

These configurations were previously necessary because:

  • The ESLint plugin for resolving imports was not capable of understanding our mono-repository structure
  • We don't want people to directly import from files within the package directory

But these are no longer necessary as of:

Furthermore, this change will also allow packages to define their own exports on subpaths without triggering the "Path access on WordPress dependencies is not allowed" lint error.

How?

  • Removes no-restricted-syntax selector for path access on packages
  • Removes tools/eslint/import-resolver.js custom resolver and configured references to it

Testing Instructions

npm run lint:js should pass.

Additionally, you can verify that the original intent of the subpath rules is upheld when trying to import from a subpath of a package:

diff --git a/packages/customize-widgets/src/components/keyboard-shortcuts/index.js b/packages/customize-widgets/src/components/keyboard-shortcuts/index.js
index 5c5f3ea2bc..74908ef2b1 100644
--- a/packages/customize-widgets/src/components/keyboard-shortcuts/index.js
+++ b/packages/customize-widgets/src/components/keyboard-shortcuts/index.js
@@ -8,3 +8,3 @@ import {
 } from '@wordpress/keyboard-shortcuts';
-import { isAppleOS } from '@wordpress/keycodes';
+import { isAppleOS } from '@wordpress/keycodes/src/is-apple-os';
 import { useDispatch } from '@wordpress/data';
> npm run lint:js packages/customize-widgets/src/components/keyboard-shortcuts/index.js

/packages/customize-widgets/src/components/keyboard-shortcuts/index.js
   9:27  error    Unable to resolve path to module '@wordpress/keycodes/src/is-apple-os'   

@github-actions
Copy link
Copy Markdown

github-actions bot commented Nov 4, 2025

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: aduth <aduth@git.wordpress.org>
Co-authored-by: youknowriad <youknowriad@git.wordpress.org>
Co-authored-by: jsnajdr <jsnajdr@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@aduth aduth mentioned this pull request Nov 4, 2025
@aduth aduth added the [Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests. label Nov 4, 2025
@aduth
Copy link
Copy Markdown
Member Author

aduth commented Nov 4, 2025

Evidenced by the build, one downside of this is that it requires an upfront npm run build to ensure the files referenced by exports exists. Maybe that's reasonable? Or a good reason to at least keep the behavior to redirect to /src/ files. Maybe there's a way we can make the resolver aware of the source files in a standard way.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Nov 4, 2025

Size Change: 0 B

Total Size: 2.58 MB

ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/abilities/index.min.js 43 kB
build/modules/block-editor/utils/fit-text-frontend.min.js 549 B
build/modules/block-library/accordion/view.min.js 779 B
build/modules/block-library/file/view.min.js 346 B
build/modules/block-library/form/view.min.js 528 B
build/modules/block-library/image/view.min.js 1.95 kB
build/modules/block-library/navigation/view.min.js 1.03 kB
build/modules/block-library/query/view.min.js 518 B
build/modules/block-library/search/view.min.js 498 B
build/modules/block-library/tabs/view.min.js 859 B
build/modules/boot/index.min.js 102 kB
build/modules/edit-site-init/index.min.js 1.41 kB
build/modules/interactivity-router/full-page.min.js 451 B
build/modules/interactivity-router/index.min.js 11.5 kB
build/modules/interactivity/index.min.js 14.9 kB
build/modules/latex-to-mathml/index.min.js 56.5 kB
build/modules/latex-to-mathml/loader.min.js 131 B
build/modules/lazy-editor/index.min.js 18.8 kB
build/modules/route/index.min.js 24.5 kB
build/modules/workflow/index.min.js 36.8 kB
build/scripts/a11y/index.min.js 1.06 kB
build/scripts/annotations/index.min.js 2.38 kB
build/scripts/api-fetch/index.min.js 2.83 kB
build/scripts/autop/index.min.js 2.18 kB
build/scripts/blob/index.min.js 631 B
build/scripts/block-directory/index.min.js 8.03 kB
build/scripts/block-editor/index.min.js 324 kB
build/scripts/block-library/index.min.js 277 kB
build/scripts/block-serialization-default-parser/index.min.js 1.16 kB
build/scripts/block-serialization-spec-parser/index.min.js 3.08 kB
build/scripts/blocks/index.min.js 56.3 kB
build/scripts/commands/index.min.js 19.9 kB
build/scripts/components/index.min.js 272 kB
build/scripts/compose/index.min.js 13.9 kB
build/scripts/core-commands/index.min.js 4.13 kB
build/scripts/core-data/index.min.js 86.1 kB
build/scripts/customize-widgets/index.min.js 12.3 kB
build/scripts/data-controls/index.min.js 793 B
build/scripts/data/index.min.js 9.62 kB
build/scripts/date/index.min.js 23.6 kB
build/scripts/deprecated/index.min.js 752 B
build/scripts/dom-ready/index.min.js 476 B
build/scripts/dom/index.min.js 4.91 kB
build/scripts/edit-post/index.min.js 16.3 kB
build/scripts/edit-site/index.min.js 234 kB
build/scripts/edit-widgets/index.min.js 20 kB
build/scripts/editor/index.min.js 284 kB
build/scripts/element/index.min.js 5.19 kB
build/scripts/escape-html/index.min.js 586 B
build/scripts/format-library/index.min.js 10.8 kB
build/scripts/hooks/index.min.js 1.83 kB
build/scripts/html-entities/index.min.js 494 B
build/scripts/i18n/index.min.js 2.46 kB
build/scripts/is-shallow-equal/index.min.js 568 B
build/scripts/keyboard-shortcuts/index.min.js 1.57 kB
build/scripts/keycodes/index.min.js 1.53 kB
build/scripts/list-reusable-blocks/index.min.js 2.44 kB
build/scripts/media-utils/index.min.js 67.6 kB
build/scripts/notices/index.min.js 1.11 kB
build/scripts/nux/index.min.js 1.88 kB
build/scripts/patterns/index.min.js 7.88 kB
build/scripts/plugins/index.min.js 2.14 kB
build/scripts/preferences-persistence/index.min.js 2.15 kB
build/scripts/preferences/index.min.js 3.31 kB
build/scripts/primitives/index.min.js 1.01 kB
build/scripts/priority-queue/index.min.js 1.61 kB
build/scripts/private-apis/index.min.js 1.06 kB
build/scripts/react-i18n/index.min.js 832 B
build/scripts/react-refresh-entry/index.min.js 9.44 kB
build/scripts/react-refresh-runtime/index.min.js 3.59 kB
build/scripts/redux-routine/index.min.js 3.36 kB
build/scripts/reusable-blocks/index.min.js 2.93 kB
build/scripts/rich-text/index.min.js 12.9 kB
build/scripts/router/index.min.js 5.96 kB
build/scripts/server-side-render/index.min.js 1.91 kB
build/scripts/shortcode/index.min.js 1.58 kB
build/scripts/style-engine/index.min.js 2.33 kB
build/scripts/theme/index.min.js 20.8 kB
build/scripts/token-list/index.min.js 739 B
build/scripts/undo-manager/index.min.js 917 B
build/scripts/url/index.min.js 3.98 kB
build/scripts/vendors/react-dom.min.js 43 kB
build/scripts/vendors/react-jsx-runtime.min.js 691 B
build/scripts/vendors/react.min.js 4.27 kB
build/scripts/viewport/index.min.js 1.22 kB
build/scripts/warning/index.min.js 454 B
build/scripts/widgets/index.min.js 7.81 kB
build/scripts/wordcount/index.min.js 1.04 kB
build/styles/block-directory/style-rtl.css 1.05 kB
build/styles/block-directory/style.css 1.05 kB
build/styles/block-editor/content-rtl.css 4.8 kB
build/styles/block-editor/content.css 4.79 kB
build/styles/block-editor/default-editor-styles-rtl.css 224 B
build/styles/block-editor/default-editor-styles.css 224 B
build/styles/block-editor/style-rtl.css 16.4 kB
build/styles/block-editor/style.css 16.4 kB
build/styles/block-library/accordion-heading/style-rtl.css 325 B
build/styles/block-library/accordion-heading/style.css 325 B
build/styles/block-library/accordion-item/style-rtl.css 180 B
build/styles/block-library/accordion-item/style.css 180 B
build/styles/block-library/accordion-panel/style-rtl.css 99 B
build/styles/block-library/accordion-panel/style.css 99 B
build/styles/block-library/accordion/style-rtl.css 62 B
build/styles/block-library/accordion/style.css 62 B
build/styles/block-library/archives/editor-rtl.css 61 B
build/styles/block-library/archives/editor.css 61 B
build/styles/block-library/archives/style-rtl.css 90 B
build/styles/block-library/archives/style.css 90 B
build/styles/block-library/audio/editor-rtl.css 149 B
build/styles/block-library/audio/editor.css 151 B
build/styles/block-library/audio/style-rtl.css 132 B
build/styles/block-library/audio/style.css 132 B
build/styles/block-library/audio/theme-rtl.css 134 B
build/styles/block-library/audio/theme.css 134 B
build/styles/block-library/avatar/editor-rtl.css 115 B
build/styles/block-library/avatar/editor.css 115 B
build/styles/block-library/avatar/style-rtl.css 104 B
build/styles/block-library/avatar/style.css 104 B
build/styles/block-library/breadcrumbs/style-rtl.css 203 B
build/styles/block-library/breadcrumbs/style.css 203 B
build/styles/block-library/button/editor-rtl.css 265 B
build/styles/block-library/button/editor.css 265 B
build/styles/block-library/button/style-rtl.css 554 B
build/styles/block-library/button/style.css 554 B
build/styles/block-library/buttons/editor-rtl.css 291 B
build/styles/block-library/buttons/editor.css 291 B
build/styles/block-library/buttons/style-rtl.css 349 B
build/styles/block-library/buttons/style.css 349 B
build/styles/block-library/calendar/style-rtl.css 239 B
build/styles/block-library/calendar/style.css 239 B
build/styles/block-library/categories/editor-rtl.css 132 B
build/styles/block-library/categories/editor.css 131 B
build/styles/block-library/categories/style-rtl.css 152 B
build/styles/block-library/categories/style.css 152 B
build/styles/block-library/classic-rtl.css 321 B
build/styles/block-library/classic.css 321 B
build/styles/block-library/code/editor-rtl.css 53 B
build/styles/block-library/code/editor.css 53 B
build/styles/block-library/code/style-rtl.css 139 B
build/styles/block-library/code/style.css 139 B
build/styles/block-library/code/theme-rtl.css 122 B
build/styles/block-library/code/theme.css 122 B
build/styles/block-library/columns/editor-rtl.css 108 B
build/styles/block-library/columns/editor.css 108 B
build/styles/block-library/columns/style-rtl.css 421 B
build/styles/block-library/columns/style.css 421 B
build/styles/block-library/comment-author-avatar/editor-rtl.css 124 B
build/styles/block-library/comment-author-avatar/editor.css 124 B
build/styles/block-library/comment-author-name/style-rtl.css 72 B
build/styles/block-library/comment-author-name/style.css 72 B
build/styles/block-library/comment-content/style-rtl.css 120 B
build/styles/block-library/comment-content/style.css 120 B
build/styles/block-library/comment-date/style-rtl.css 65 B
build/styles/block-library/comment-date/style.css 65 B
build/styles/block-library/comment-edit-link/style-rtl.css 70 B
build/styles/block-library/comment-edit-link/style.css 70 B
build/styles/block-library/comment-reply-link/style-rtl.css 71 B
build/styles/block-library/comment-reply-link/style.css 71 B
build/styles/block-library/comment-template/style-rtl.css 191 B
build/styles/block-library/comment-template/style.css 191 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.css 122 B
build/styles/block-library/comments-pagination-numbers/editor.css 121 B
build/styles/block-library/comments-pagination/editor-rtl.css 168 B
build/styles/block-library/comments-pagination/editor.css 168 B
build/styles/block-library/comments-pagination/style-rtl.css 201 B
build/styles/block-library/comments-pagination/style.css 201 B
build/styles/block-library/comments-title/editor-rtl.css 75 B
build/styles/block-library/comments-title/editor.css 75 B
build/styles/block-library/comments/editor-rtl.css 842 B
build/styles/block-library/comments/editor.css 842 B
build/styles/block-library/comments/style-rtl.css 637 B
build/styles/block-library/comments/style.css 637 B
build/styles/block-library/common-rtl.css 1.11 kB
build/styles/block-library/common.css 1.11 kB
build/styles/block-library/cover/editor-rtl.css 631 B
build/styles/block-library/cover/editor.css 631 B
build/styles/block-library/cover/style-rtl.css 1.82 kB
build/styles/block-library/cover/style.css 1.81 kB
build/styles/block-library/details/editor-rtl.css 65 B
build/styles/block-library/details/editor.css 65 B
build/styles/block-library/details/style-rtl.css 86 B
build/styles/block-library/details/style.css 86 B
build/styles/block-library/editor-elements-rtl.css 75 B
build/styles/block-library/editor-elements.css 75 B
build/styles/block-library/editor-rtl.css 11.8 kB
build/styles/block-library/editor.css 11.8 kB
build/styles/block-library/elements-rtl.css 54 B
build/styles/block-library/elements.css 54 B
build/styles/block-library/embed/editor-rtl.css 331 B
build/styles/block-library/embed/editor.css 331 B
build/styles/block-library/embed/style-rtl.css 448 B
build/styles/block-library/embed/style.css 448 B
build/styles/block-library/embed/theme-rtl.css 133 B
build/styles/block-library/embed/theme.css 133 B
build/styles/block-library/file/editor-rtl.css 324 B
build/styles/block-library/file/editor.css 324 B
build/styles/block-library/file/style-rtl.css 278 B
build/styles/block-library/file/style.css 278 B
build/styles/block-library/footnotes/style-rtl.css 198 B
build/styles/block-library/footnotes/style.css 197 B
build/styles/block-library/form-input/editor-rtl.css 229 B
build/styles/block-library/form-input/editor.css 229 B
build/styles/block-library/form-input/style-rtl.css 366 B
build/styles/block-library/form-input/style.css 366 B
build/styles/block-library/form-submission-notification/editor-rtl.css 344 B
build/styles/block-library/form-submission-notification/editor.css 341 B
build/styles/block-library/form-submit-button/style-rtl.css 69 B
build/styles/block-library/form-submit-button/style.css 69 B
build/styles/block-library/freeform/editor-rtl.css 2.59 kB
build/styles/block-library/freeform/editor.css 2.59 kB
build/styles/block-library/gallery/editor-rtl.css 615 B
build/styles/block-library/gallery/editor.css 616 B
build/styles/block-library/gallery/style-rtl.css 1.84 kB
build/styles/block-library/gallery/style.css 1.84 kB
build/styles/block-library/gallery/theme-rtl.css 108 B
build/styles/block-library/gallery/theme.css 108 B
build/styles/block-library/group/editor-rtl.css 335 B
build/styles/block-library/group/editor.css 335 B
build/styles/block-library/group/style-rtl.css 103 B
build/styles/block-library/group/style.css 103 B
build/styles/block-library/group/theme-rtl.css 79 B
build/styles/block-library/group/theme.css 79 B
build/styles/block-library/heading/style-rtl.css 205 B
build/styles/block-library/heading/style.css 205 B
build/styles/block-library/html/editor-rtl.css 419 B
build/styles/block-library/html/editor.css 419 B
build/styles/block-library/image/editor-rtl.css 763 B
build/styles/block-library/image/editor.css 763 B
build/styles/block-library/image/style-rtl.css 1.6 kB
build/styles/block-library/image/style.css 1.59 kB
build/styles/block-library/image/theme-rtl.css 137 B
build/styles/block-library/image/theme.css 137 B
build/styles/block-library/latest-comments/style-rtl.css 355 B
build/styles/block-library/latest-comments/style.css 354 B
build/styles/block-library/latest-posts/editor-rtl.css 139 B
build/styles/block-library/latest-posts/editor.css 138 B
build/styles/block-library/latest-posts/style-rtl.css 520 B
build/styles/block-library/latest-posts/style.css 520 B
build/styles/block-library/list/style-rtl.css 107 B
build/styles/block-library/list/style.css 107 B
build/styles/block-library/loginout/style-rtl.css 61 B
build/styles/block-library/loginout/style.css 61 B
build/styles/block-library/math/editor-rtl.css 105 B
build/styles/block-library/math/editor.css 105 B
build/styles/block-library/math/style-rtl.css 61 B
build/styles/block-library/math/style.css 61 B
build/styles/block-library/media-text/editor-rtl.css 321 B
build/styles/block-library/media-text/editor.css 320 B
build/styles/block-library/media-text/style-rtl.css 543 B
build/styles/block-library/media-text/style.css 542 B
build/styles/block-library/more/editor-rtl.css 393 B
build/styles/block-library/more/editor.css 393 B
build/styles/block-library/navigation-link/editor-rtl.css 645 B
build/styles/block-library/navigation-link/editor.css 647 B
build/styles/block-library/navigation-link/style-rtl.css 190 B
build/styles/block-library/navigation-link/style.css 188 B
build/styles/block-library/navigation-submenu/editor-rtl.css 295 B
build/styles/block-library/navigation-submenu/editor.css 294 B
build/styles/block-library/navigation/editor-rtl.css 2.24 kB
build/styles/block-library/navigation/editor.css 2.24 kB
build/styles/block-library/navigation/style-rtl.css 2.27 kB
build/styles/block-library/navigation/style.css 2.25 kB
build/styles/block-library/nextpage/editor-rtl.css 392 B
build/styles/block-library/nextpage/editor.css 392 B
build/styles/block-library/page-list/editor-rtl.css 356 B
build/styles/block-library/page-list/editor.css 356 B
build/styles/block-library/page-list/style-rtl.css 192 B
build/styles/block-library/page-list/style.css 192 B
build/styles/block-library/paragraph/editor-rtl.css 251 B
build/styles/block-library/paragraph/editor.css 251 B
build/styles/block-library/paragraph/style-rtl.css 341 B
build/styles/block-library/paragraph/style.css 340 B
build/styles/block-library/post-author-biography/style-rtl.css 74 B
build/styles/block-library/post-author-biography/style.css 74 B
build/styles/block-library/post-author-name/style-rtl.css 69 B
build/styles/block-library/post-author-name/style.css 69 B
build/styles/block-library/post-author/style-rtl.css 188 B
build/styles/block-library/post-author/style.css 189 B
build/styles/block-library/post-comments-count/style-rtl.css 72 B
build/styles/block-library/post-comments-count/style.css 72 B
build/styles/block-library/post-comments-form/editor-rtl.css 96 B
build/styles/block-library/post-comments-form/editor.css 96 B
build/styles/block-library/post-comments-form/style-rtl.css 525 B
build/styles/block-library/post-comments-form/style.css 525 B
build/styles/block-library/post-comments-link/style-rtl.css 71 B
build/styles/block-library/post-comments-link/style.css 71 B
build/styles/block-library/post-content/style-rtl.css 61 B
build/styles/block-library/post-content/style.css 61 B
build/styles/block-library/post-date/style-rtl.css 62 B
build/styles/block-library/post-date/style.css 62 B
build/styles/block-library/post-excerpt/editor-rtl.css 71 B
build/styles/block-library/post-excerpt/editor.css 71 B
build/styles/block-library/post-excerpt/style-rtl.css 155 B
build/styles/block-library/post-excerpt/style.css 155 B
build/styles/block-library/post-featured-image/editor-rtl.css 719 B
build/styles/block-library/post-featured-image/editor.css 717 B
build/styles/block-library/post-featured-image/style-rtl.css 347 B
build/styles/block-library/post-featured-image/style.css 347 B
build/styles/block-library/post-navigation-link/style-rtl.css 215 B
build/styles/block-library/post-navigation-link/style.css 214 B
build/styles/block-library/post-template/style-rtl.css 414 B
build/styles/block-library/post-template/style.css 414 B
build/styles/block-library/post-terms/style-rtl.css 96 B
build/styles/block-library/post-terms/style.css 96 B
build/styles/block-library/post-time-to-read/style-rtl.css 70 B
build/styles/block-library/post-time-to-read/style.css 70 B
build/styles/block-library/post-title/style-rtl.css 162 B
build/styles/block-library/post-title/style.css 162 B
build/styles/block-library/preformatted/style-rtl.css 125 B
build/styles/block-library/preformatted/style.css 125 B
build/styles/block-library/pullquote/editor-rtl.css 133 B
build/styles/block-library/pullquote/editor.css 133 B
build/styles/block-library/pullquote/style-rtl.css 365 B
build/styles/block-library/pullquote/style.css 365 B
build/styles/block-library/pullquote/theme-rtl.css 176 B
build/styles/block-library/pullquote/theme.css 176 B
build/styles/block-library/query-pagination-numbers/editor-rtl.css 121 B
build/styles/block-library/query-pagination-numbers/editor.css 118 B
build/styles/block-library/query-pagination/editor-rtl.css 154 B
build/styles/block-library/query-pagination/editor.css 154 B
build/styles/block-library/query-pagination/style-rtl.css 237 B
build/styles/block-library/query-pagination/style.css 237 B
build/styles/block-library/query-title/style-rtl.css 64 B
build/styles/block-library/query-title/style.css 64 B
build/styles/block-library/query-total/style-rtl.css 64 B
build/styles/block-library/query-total/style.css 64 B
build/styles/block-library/query/editor-rtl.css 438 B
build/styles/block-library/query/editor.css 438 B
build/styles/block-library/quote/style-rtl.css 238 B
build/styles/block-library/quote/style.css 238 B
build/styles/block-library/quote/theme-rtl.css 233 B
build/styles/block-library/quote/theme.css 236 B
build/styles/block-library/read-more/style-rtl.css 131 B
build/styles/block-library/read-more/style.css 131 B
build/styles/block-library/reset-rtl.css 472 B
build/styles/block-library/reset.css 472 B
build/styles/block-library/rss/editor-rtl.css 126 B
build/styles/block-library/rss/editor.css 126 B
build/styles/block-library/rss/style-rtl.css 284 B
build/styles/block-library/rss/style.css 283 B
build/styles/block-library/search/editor-rtl.css 199 B
build/styles/block-library/search/editor.css 199 B
build/styles/block-library/search/style-rtl.css 665 B
build/styles/block-library/search/style.css 666 B
build/styles/block-library/search/theme-rtl.css 113 B
build/styles/block-library/search/theme.css 113 B
build/styles/block-library/separator/editor-rtl.css 100 B
build/styles/block-library/separator/editor.css 100 B
build/styles/block-library/separator/style-rtl.css 248 B
build/styles/block-library/separator/style.css 248 B
build/styles/block-library/separator/theme-rtl.css 195 B
build/styles/block-library/separator/theme.css 195 B
build/styles/block-library/shortcode/editor-rtl.css 286 B
build/styles/block-library/shortcode/editor.css 286 B
build/styles/block-library/site-logo/editor-rtl.css 773 B
build/styles/block-library/site-logo/editor.css 770 B
build/styles/block-library/site-logo/style-rtl.css 218 B
build/styles/block-library/site-logo/style.css 218 B
build/styles/block-library/site-tagline/editor-rtl.css 87 B
build/styles/block-library/site-tagline/editor.css 87 B
build/styles/block-library/site-tagline/style-rtl.css 65 B
build/styles/block-library/site-tagline/style.css 65 B
build/styles/block-library/site-title/editor-rtl.css 85 B
build/styles/block-library/site-title/editor.css 85 B
build/styles/block-library/site-title/style-rtl.css 143 B
build/styles/block-library/site-title/style.css 143 B
build/styles/block-library/social-link/editor-rtl.css 314 B
build/styles/block-library/social-link/editor.css 314 B
build/styles/block-library/social-links/editor-rtl.css 339 B
build/styles/block-library/social-links/editor.css 338 B
build/styles/block-library/social-links/style-rtl.css 1.51 kB
build/styles/block-library/social-links/style.css 1.51 kB
build/styles/block-library/spacer/editor-rtl.css 346 B
build/styles/block-library/spacer/editor.css 346 B
build/styles/block-library/spacer/style-rtl.css 48 B
build/styles/block-library/spacer/style.css 48 B
build/styles/block-library/style-rtl.css 16.5 kB
build/styles/block-library/style.css 16.5 kB
build/styles/block-library/tab/style-rtl.css 202 B
build/styles/block-library/tab/style.css 202 B
build/styles/block-library/table-of-contents/style-rtl.css 83 B
build/styles/block-library/table-of-contents/style.css 83 B
build/styles/block-library/table/editor-rtl.css 394 B
build/styles/block-library/table/editor.css 394 B
build/styles/block-library/table/style-rtl.css 641 B
build/styles/block-library/table/style.css 640 B
build/styles/block-library/table/theme-rtl.css 152 B
build/styles/block-library/table/theme.css 152 B
build/styles/block-library/tabs/editor-rtl.css 236 B
build/styles/block-library/tabs/editor.css 236 B
build/styles/block-library/tabs/style-rtl.css 983 B
build/styles/block-library/tabs/style.css 983 B
build/styles/block-library/tag-cloud/editor-rtl.css 92 B
build/styles/block-library/tag-cloud/editor.css 92 B
build/styles/block-library/tag-cloud/style-rtl.css 248 B
build/styles/block-library/tag-cloud/style.css 248 B
build/styles/block-library/template-part/editor-rtl.css 368 B
build/styles/block-library/template-part/editor.css 368 B
build/styles/block-library/template-part/theme-rtl.css 113 B
build/styles/block-library/template-part/theme.css 113 B
build/styles/block-library/term-count/style-rtl.css 63 B
build/styles/block-library/term-count/style.css 63 B
build/styles/block-library/term-description/style-rtl.css 126 B
build/styles/block-library/term-description/style.css 126 B
build/styles/block-library/term-name/style-rtl.css 62 B
build/styles/block-library/term-name/style.css 62 B
build/styles/block-library/term-template/editor-rtl.css 225 B
build/styles/block-library/term-template/editor.css 225 B
build/styles/block-library/term-template/style-rtl.css 114 B
build/styles/block-library/term-template/style.css 114 B
build/styles/block-library/text-columns/editor-rtl.css 95 B
build/styles/block-library/text-columns/editor.css 95 B
build/styles/block-library/text-columns/style-rtl.css 165 B
build/styles/block-library/text-columns/style.css 165 B
build/styles/block-library/theme-rtl.css 715 B
build/styles/block-library/theme.css 719 B
build/styles/block-library/verse/style-rtl.css 123 B
build/styles/block-library/verse/style.css 123 B
build/styles/block-library/video/editor-rtl.css 415 B
build/styles/block-library/video/editor.css 416 B
build/styles/block-library/video/style-rtl.css 202 B
build/styles/block-library/video/style.css 202 B
build/styles/block-library/video/theme-rtl.css 134 B
build/styles/block-library/video/theme.css 134 B
build/styles/commands/style-rtl.css 1.72 kB
build/styles/commands/style.css 1.72 kB
build/styles/components/style-rtl.css 14 kB
build/styles/components/style.css 14 kB
build/styles/customize-widgets/style-rtl.css 1.44 kB
build/styles/customize-widgets/style.css 1.44 kB
build/styles/edit-post/classic-rtl.css 426 B
build/styles/edit-post/classic.css 427 B
build/styles/edit-post/style-rtl.css 3.42 kB
build/styles/edit-post/style.css 3.42 kB
build/styles/edit-site/style-rtl.css 16.1 kB
build/styles/edit-site/style.css 16.2 kB
build/styles/edit-widgets/style-rtl.css 4.67 kB
build/styles/edit-widgets/style.css 4.67 kB
build/styles/editor/style-rtl.css 18.8 kB
build/styles/editor/style.css 18.8 kB
build/styles/format-library/style-rtl.css 326 B
build/styles/format-library/style.css 326 B
build/styles/list-reusable-blocks/style-rtl.css 1.02 kB
build/styles/list-reusable-blocks/style.css 1.02 kB
build/styles/nux/style-rtl.css 622 B
build/styles/nux/style.css 618 B
build/styles/patterns/style-rtl.css 611 B
build/styles/patterns/style.css 611 B
build/styles/preferences/style-rtl.css 415 B
build/styles/preferences/style.css 415 B
build/styles/reusable-blocks/style-rtl.css 275 B
build/styles/reusable-blocks/style.css 275 B
build/styles/widgets/style-rtl.css 1.17 kB
build/styles/widgets/style.css 1.18 kB

compressed-size-action

@github-actions
Copy link
Copy Markdown

github-actions bot commented Nov 4, 2025

Flaky tests detected in 623f8a2.
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/19838573135
📝 Reported issues:

@aduth
Copy link
Copy Markdown
Member Author

aduth commented Nov 4, 2025

Evidenced by the build, one downside of this is that it requires an upfront npm run build to ensure the files referenced by exports exists. [...]

Possible solutions:

  • Yes, we'll require that someone runs build before linting
    • Pro: Simple
    • Con: Poor developer experience
  • Or: Restore the behavior of tools/eslint/import-resolver.js
    • Pro: Simple, consolidated solution
    • Con: Doesn't actually respect exports, meaning we can't define custom subpath exports
  • Or: Define a custom exports condition name pointing to src (e.g. exports.source) in combination with eslint-import-resolver-typescript's conditionNames option pointing to that path
    • Pro: "Standards-based" way of approaching this, actually uses and respects exports
    • Con: Has to be added for every package. While it's technically standards-based, it's custom to our project

@aduth aduth force-pushed the remove/eslint-custom-resolve branch from ee33892 to a6ff3de Compare November 13, 2025 22:22
@aduth aduth requested a review from dmsnell as a code owner November 13, 2025 22:22
@aduth
Copy link
Copy Markdown
Member Author

aduth commented Nov 13, 2025

  • Or: Restore the behavior of tools/eslint/import-resolver.js

In a6ff3de, I ended up with a hybrid approach reintroducing the custom resolver, but enhancing it with support to consider subpaths using the package's package.json exports.

@aduth aduth force-pushed the remove/eslint-custom-resolve branch from a6ff3de to 9dc01ec Compare November 24, 2025 21:32
@aduth aduth requested review from a team, gziolo and ryanwelcher as code owners November 24, 2025 21:32
@youknowriad
Copy link
Copy Markdown
Contributor

What would be the impact on DevX if we required build before linting? Is it just for CI? If that's the case maybe we should just go for it?

@aduth
Copy link
Copy Markdown
Member Author

aduth commented Nov 25, 2025

What would be the impact on DevX if we required build before linting? Is it just for CI? If that's the case maybe we should just go for it?

I think it could be negative enough in regular development workflows to be worth trying to avoid. It might not always crop up because usually a regular contributor will likely have some form of built packages in their local copy of the project, but (a) it could be a barrier for new contributors working from a fresh clone and (b) could create issues where linting identifies issues only because the built copy is out of date. In both cases, these would clear up after running npm run build, but that might not be obvious and some people might waste time trying to debug failures in their local copy.

wp: 'readonly',
},
settings: {
'import/internal-regex': wpPackagesRegExp,
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Noting that this can have an impact on rules like import/order in considering packages as "internal", though (a) this base config exists in a reusable package for third-party consumption where @wordpress/ packages are not internal, and (b) even inside the context of this project, we distinguish @wordpress/ packages from "internal" dependencies.

It might still make sense to define this at the root /.eslintrc.js since, after all, the setting is described as "useful when you are utilizing a monorepo setup or developing a set of packages that depend on each other". But it doesn't seem like something which will actually have much of an impact in practical usage from what I can tell.

Related: #73396

Copy link
Copy Markdown
Member Author

@aduth aduth Nov 25, 2025

Choose a reason for hiding this comment

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

Noting that this can have an impact on rules like import/order in considering packages as "internal", though (a) this base config exists in a reusable package for third-party consumption where @wordpress/ packages are not internal, and (b) even inside the context of this project, we distinguish @wordpress/ packages from "internal" dependencies.

I added an extra CHANGELOG note clarifying this in 0748af8.

It might still make sense to define this at the root /.eslintrc.js since, after all, the setting is described as "useful when you are utilizing a monorepo setup or developing a set of packages that depend on each other". But it doesn't seem like something which will actually have much of an impact in practical usage from what I can tell.

Funny enough, while this might make sense to do, I recalled that one of the changes I'm making in this branch is to remove the code where we explicitly unset this value in our .eslintrc.js. So this should change should have no net effect in this project. Ironic that we were defining this default internal regular expression and not using it in the one place it might make sense to do so 😅

@aduth
Copy link
Copy Markdown
Member Author

aduth commented Nov 25, 2025

I had some trouble with the tests for @wordpress/create-block. A quick summary:

  • Removing the exceptions for @wordpress/ packages means that these lint checks were now happening in the scaffolded code. This is an expected and desirable outcome of the changes.
  • However, the tests don't actually install dependencies in the scaffolded code, and rely on dependencies from the root project. And, as mentioned in Testing: Remove custom import resolvers and package subpath syntax rules #72978 (comment), we don't actually run a build in static analysis checks, so the packages couldn't be resolved in the same way. This is addressed by inserting a custom ESLint configuration for the scaffolded code to use the same resolved we use in the project.
    • In the real world, projects using @wordpress/create-block would use the NPM-published versions of these dependencies, which would already have the built artifacts

// source file using its declared exports.
try {
const manifestPath = path.join( packagePath, 'package.json' );
const manifest = require( manifestPath );
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If you know the exact path to the package.json, and don't need to resolve it, it's better to read and parse the JSON file "manually". require is supposed to respect the exports field, and should fail when package.json is not declared as export. If it doesn't fail now, it will eventually start failing one day 🙂

If we ever declare package.json as a package export, it's always because of slightly broken tools like this.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

If you know the exact path to the package.json, and don't need to resolve it, it's better to read and parse the JSON file "manually". require is supposed to respect the exports field, and should fail when package.json is not declared as export. If it doesn't fail now, it will eventually start failing one day 🙂

If we ever declare package.json as a package export, it's always because of slightly broken tools like this.

That's a good call. I've updated in aa8ab95

} from '../fixtures';

/* eslint-disable no-restricted-syntax */
import * as form from '@wordpress/block-library/src/form';
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is interesting. The src folder is not a part of block-library's exports field, so this import should fail.

It turns out that block-library doesn't export the individual blocks at all, the src/index.js file doesn't re-export them. How can we fix this?

This question is also very relevant for #73516, where the entire block-library is going to be bundled into one block-library/build-module/index.js file and the individual block files and folders don't exist any more.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This is interesting. The src folder is not a part of block-library's exports field, so this import should fail.

Yeah, that's a good point.

From what I can tell:

My impression was that these block implementations were meant to be exposed through the build-module wildcard entrypoint. We could probably update this code to use those paths, but as you mention, that becomes incompatible with your changes in #73516.

Some ideas for how we could move forward there:

  • Could we specially handle wildcard entrypoints to preserve the existing behavior in just those instances?
  • Maybe we don't actually want to compile these down to a single file? 😬
  • We could add individual exports for each and every block, assuming your changes support that.

All that being said, I don't think any of this is necessarily a blocker for the changes I'm proposing here.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

My impression was that these block implementations were meant to be exposed through the build-module wildcard entrypoint.

Yes that's right, even the docs explicitly mention the build-module imports:

https://github.com/WordPress/gutenberg/blob/trunk/packages/block-library/README.md#registering-individual-blocks

It would be nicer if instead of importing @wordpress/block-library/build-module/verse/init.js we could import just @wordpress/block-library/verse/init.js, but that would probably require an exports entry for each of the 100+ Core blocks.

We could probably update this code to use those paths

When I try this locally, it works. In the full-content.test.js file, replace the /src/ imports with /build-module/. And also update the src/*/block.json glob. Then run npm run fixtures:generate. It will regenerate the fixtures in test/integration/fixtures/blocks, even if you delete the *.json and *.serialized.html files there.

Let's do this as part of this PR, as we're touching the file anyway.

Maybe we don't actually want to compile these down to a single file?

Yes, the block-library package is special. The single-file bundle still makes sense, but additionally we'll want to expose each block individually. The block.json file and the edit/save/view/init scripts.

There is prior art for this. Ariakit bundles its packages, and @ariakit/react has one big bundle with all components, and also supports individual exports like @ariakit/react/button.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

It would be nicer if instead of importing @wordpress/block-library/build-module/verse/init.js we could import just @wordpress/block-library/verse/init.js, but that would probably require an exports entry for each of the 100+ Core blocks.

AFAIK it's perfectly valid for us to do something like this, which would achieve that effect?

"exports": {
  "./*", "./build-module/*"
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

AFAIK it's perfectly valid for us to do something like this, which would achieve that effect?

I'll try this in #73516, which needs a major fix for block-library anyway 🙂

The only possible risk is that the build-module folder will contain something that we don't want to export. But especially with the bundling done in #73516 this shouldn't be happening.

Copy link
Copy Markdown
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.

Looks good. But please consider updating the block-library/src imports in full-content.test.js, it should be a small change.

@aduth
Copy link
Copy Markdown
Member Author

aduth commented Dec 2, 2025

I hesitated on changing the imports to use build-module paths, because that means that the packages must be built before the tests are run, which should ideally not be a requirement.

I went a different direction in #73705, opting to remove these imports altogether.

@aduth aduth force-pushed the remove/eslint-custom-resolve branch from 623f8a2 to 4847774 Compare December 3, 2025 20:05
@aduth aduth force-pushed the remove/eslint-custom-resolve branch from 4847774 to 1f08cb1 Compare December 4, 2025 15:21
@aduth aduth merged commit 2314c0c into trunk Dec 4, 2025
43 of 44 checks passed
@aduth aduth deleted the remove/eslint-custom-resolve branch December 4, 2025 17:35
@github-actions github-actions bot added this to the Gutenberg 22.3 milestone Dec 4, 2025
dcalhoun added a commit to wordpress-mobile/GutenbergKit that referenced this pull request Jan 21, 2026
`@wordpress` modules are no longer excluded from the
`import/no-extraneous-dependencies` rule.

See: WordPress/gutenberg#72978
dcalhoun added a commit to wordpress-mobile/GutenbergKit that referenced this pull request Jan 21, 2026
Address lint errors following recent changes to the
`@wordpress/eslint-plugin` package. Align with the Gutenberg project.

See: WordPress/gutenberg#72978

```
./GutenbergKit/src/utils/wordpress-globals.js
  47:41  error  Unable to resolve path to module '@wordpress/preferences-persistence'  import/no-unresolved
```
dcalhoun added a commit to wordpress-mobile/GutenbergKit that referenced this pull request Jan 21, 2026
…#286)

* build(deps-dev): Bump @wordpress/eslint-plugin from 22.22.0 to 24.0.0

Bumps [@wordpress/eslint-plugin](https://github.com/WordPress/gutenberg/tree/HEAD/packages/eslint-plugin) from 22.22.0 to 24.0.0.
- [Release notes](https://github.com/WordPress/gutenberg/releases)
- [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/eslint-plugin@24.0.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@wordpress/eslint-plugin"
  dependency-version: 24.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* style: Address lint errors from undeclared WordPress dependencies

`@wordpress` modules are no longer excluded from the
`import/no-extraneous-dependencies` rule.

See: WordPress/gutenberg#72978

* build: Align ESLint import resolver with WordPress packages

Address lint errors following recent changes to the
`@wordpress/eslint-plugin` package. Align with the Gutenberg project.

See: WordPress/gutenberg#72978

```
./GutenbergKit/src/utils/wordpress-globals.js
  47:41  error  Unable to resolve path to module '@wordpress/preferences-persistence'  import/no-unresolved
```

* task: Regenerate `@wordpress/rich-text` patch file

Regeneration is required after upgrading package versions.

```
**ERROR** Failed to apply patch for package @wordpress/rich-text at path

    node_modules/@wordpress/rich-text

  This error was caused because @wordpress/rich-text has changed since you
  made the patch file for it. This introduced conflicts with your patch,
  just like a merge conflict in Git when separate incompatible changes are
  made to the same piece of code.

  Maybe this means your patch file is no longer necessary, in which case
  hooray! Just delete it!

  Otherwise, you need to generate a new patch file.

  To generate a new one, just repeat the steps you made to generate the first
  one.

  i.e. manually make the appropriate file changes, then run

    patch-package @wordpress/rich-text

  Info:
    Patch file: patches/@WordPress+rich-text+7.37.0.patch
    Patch was made for version: 7.37.0
    Installed version: 7.38.0
```

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Calhoun <github@davidcalhoun.me>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants