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

Enable useSelect autocompletion #41911

Merged

Conversation

adamziel
Copy link
Contributor

@adamziel adamziel commented Jun 23, 2022

What?

This PR builds @wordpress/data types to provide autocompletion support for useSelect across the repository.

The two included cosmetic changes in the block-editor package are here to showcase how it works:

CleanShot.2022-06-23.at.13.44.33.mp4

Note: For now, this only works with the store defined in the same package where useSelect is called. With this PR, TypeScript knows how to resolve the type of the useSelect hook, but all the cross-package store imports still come across as any.

How

This PR adds a wordpress__data.d.ts ambient module that re-exports the types built for the @wordpress/data package.

The intention is to keep this change contained to the Gutenberg repository until the types mature more.

Once that happens, the next step would be publishing them by adding "types": "build-types" to package.json in @wordpress/data. It tells TypeScript how to resolve the typing file for @wordpress/data (source)

Why?

Now that useSelect is typed in an autocompletion-friendly way, it only makes sense to enable that feature across the Gutenberg repository.

Testing Instructions

Go to use-available-alignments.js and confirm the autocompletion works as on the video above.

CC @sarayourfriend @dmsnell @sirreal @jsnajdr @scruffian

@adamziel adamziel added [Package] Data /packages/data Developer Experience Ideas about improving block and theme developer experience labels Jun 23, 2022
@adamziel adamziel self-assigned this Jun 23, 2022
@github-actions
Copy link

github-actions bot commented Jun 23, 2022

Size Change: +3.52 kB (0%)

Total Size: 1.25 MB

Filename Size Change
build/block-editor/index.min.js 152 kB +355 B (0%)
build/block-editor/style-rtl.css 14.5 kB -7 B (0%)
build/block-editor/style.css 14.5 kB -6 B (0%)
build/block-library/blocks/button/style-rtl.css 543 B +29 B (+6%) 🔍
build/block-library/blocks/button/style.css 543 B +29 B (+6%) 🔍
build/block-library/blocks/comment-template/style-rtl.css 187 B +60 B (+47%) 🚨
build/block-library/blocks/comment-template/style.css 185 B +58 B (+46%) 🚨
build/block-library/blocks/file/style-rtl.css 253 B +29 B (+13%) ⚠️
build/block-library/blocks/file/style.css 254 B +29 B (+13%) ⚠️
build/block-library/blocks/navigation/style-rtl.css 1.96 kB -1 B (0%)
build/block-library/blocks/navigation/style.css 1.95 kB -3 B (0%)
build/block-library/blocks/post-comments/style-rtl.css 632 B +4 B (+1%)
build/block-library/blocks/post-comments/style.css 630 B +2 B (0%)
build/block-library/blocks/search/style-rtl.css 385 B +6 B (+2%)
build/block-library/blocks/search/style.css 386 B +6 B (+2%)
build/block-library/blocks/search/theme-rtl.css 114 B +50 B (+78%) 🆘
build/block-library/blocks/search/theme.css 114 B +50 B (+78%) 🆘
build/block-library/index.min.js 183 kB -49 B (0%)
build/block-library/style-rtl.css 11.5 kB +95 B (+1%)
build/block-library/style.css 11.5 kB +95 B (+1%)
build/block-library/theme-rtl.css 695 B +18 B (+3%)
build/block-library/theme.css 700 B +18 B (+3%)
build/blocks/index.min.js 47.1 kB +39 B (0%)
build/components/index.min.js 230 kB +320 B (0%)
build/components/style-rtl.css 14 kB +25 B (0%)
build/components/style.css 14 kB +26 B (0%)
build/core-data/index.min.js 14.7 kB -32 B (0%)
build/customize-widgets/index.min.js 11.2 kB +18 B (0%)
build/edit-navigation/index.min.js 16 kB -9 B (0%)
build/edit-navigation/style-rtl.css 4.02 kB -9 B (0%)
build/edit-navigation/style.css 4.03 kB -9 B (0%)
build/edit-post/index.min.js 30.4 kB +45 B (0%)
build/edit-post/style-rtl.css 6.97 kB -108 B (-2%)
build/edit-post/style.css 6.97 kB -106 B (-1%)
build/edit-site/index.min.js 52 kB +1.33 kB (+3%)
build/edit-site/style-rtl.css 8.23 kB +88 B (+1%)
build/edit-site/style.css 8.21 kB +89 B (+1%)
build/edit-widgets/index.min.js 16.5 kB +34 B (0%)
build/edit-widgets/style-rtl.css 4.35 kB -37 B (-1%)
build/edit-widgets/style.css 4.35 kB -36 B (-1%)
build/editor/index.min.js 39.4 kB +766 B (+2%)
build/editor/style-rtl.css 3.65 kB +24 B (+1%)
build/editor/style.css 3.65 kB +25 B (+1%)
build/element/index.min.js 4.27 kB +3 B (0%)
build/format-library/index.min.js 6.75 kB +130 B (+2%)
build/keyboard-shortcuts/index.min.js 1.78 kB -11 B (-1%)
build/media-utils/index.min.js 2.93 kB +21 B (+1%)
build/notices/index.min.js 953 B +8 B (+1%)
build/rich-text/index.min.js 11.1 kB +13 B (0%)
build/shortcode/index.min.js 1.53 kB +11 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 6.58 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
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 65 B
build/block-library/blocks/archives/style.css 65 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 103 B
build/block-library/blocks/audio/style.css 103 B
build/block-library/blocks/audio/theme-rtl.css 110 B
build/block-library/blocks/audio/theme.css 110 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 59 B
build/block-library/blocks/avatar/style.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 441 B
build/block-library/blocks/button/editor.css 441 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 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 406 B
build/block-library/blocks/columns/style.css 406 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/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 95 B
build/block-library/blocks/comments/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 615 B
build/block-library/blocks/cover/editor.css 616 B
build/block-library/blocks/cover/style-rtl.css 1.55 kB
build/block-library/blocks/cover/style.css 1.55 kB
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 110 B
build/block-library/blocks/embed/theme.css 110 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/view.min.js 346 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.5 kB
build/block-library/blocks/gallery/style.css 1.49 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 333 B
build/block-library/blocks/group/editor.css 333 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 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 738 B
build/block-library/blocks/image/editor.css 737 B
build/block-library/blocks/image/style-rtl.css 524 B
build/block-library/blocks/image/style.css 530 B
build/block-library/blocks/image/theme-rtl.css 110 B
build/block-library/blocks/image/theme.css 110 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 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 493 B
build/block-library/blocks/media-text/style.css 490 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 705 B
build/block-library/blocks/navigation-link/editor.css 703 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 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-submenu/view.min.js 402 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 423 B
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 363 B
build/block-library/blocks/page-list/editor.css 363 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 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 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 495 B
build/block-library/blocks/post-comments-form/style.css 495 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 605 B
build/block-library/blocks/post-featured-image/editor.css 605 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 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 282 B
build/block-library/blocks/post-template/style.css 282 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 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 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 369 B
build/block-library/blocks/query/editor.css 369 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 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 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 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 233 B
build/block-library/blocks/separator/style.css 233 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 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/editor-rtl.css 708 B
build/block-library/blocks/site-logo/editor.css 708 B
build/block-library/blocks/site-logo/style-rtl.css 192 B
build/block-library/blocks/site-logo/style.css 192 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 175 B
build/block-library/blocks/table/theme.css 175 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 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/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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 561 B
build/block-library/blocks/video/editor.css 563 B
build/block-library/blocks/video/style-rtl.css 159 B
build/block-library/blocks/video/style.css 159 B
build/block-library/blocks/video/theme-rtl.css 110 B
build/block-library/blocks/video/theme.css 110 B
build/block-library/common-rtl.css 987 B
build/block-library/common.css 984 B
build/block-library/editor-rtl.css 10.2 kB
build/block-library/editor.css 10.2 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-serialization-default-parser/index.min.js 1.11 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/compose/index.min.js 11.7 kB
build/customize-widgets/style-rtl.css 1.4 kB
build/customize-widgets/style.css 1.4 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 7.95 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/escape-html/index.min.js 537 B
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keycodes/index.min.js 1.38 kB
build/list-reusable-blocks/index.min.js 1.74 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/nux/index.min.js 2.05 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.3 kB
build/primitives/index.min.js 933 B
build/priority-queue/index.min.js 612 B
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/server-side-render/index.min.js 1.61 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.19 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@kevin940726
Copy link
Member

Awesome work! This is probably my most wanted feature when working with useSelect. 💯

but all the cross-package store imports still come across as any.

Any idea how we could solve this in the future?

Unfortunately, this flag has multiple effects:

  1. It tells TypeScript how to resolve the typing file for @wordpress/data (source)
  2. Includes the build-types directory in the published npm package (source)

We want the former but not the latter. Before merging this PR we may need to decouple these behaviors. Perhaps there's a way to tell Lerna to ignore types for this package?

Why wouldn't we want the build-types directory to be included in the published npm package? I thought the directory is already on the published package?

@adamziel
Copy link
Contributor Author

@kevin940726 I somehow thought they're not being released – great spot! I am going to update the description to reflect that.

The reason I wanted to avoid releasing was to test-drive these types internally and make any necessary adjustments before releasing them to the world.

Since the build already includes types, adding "types": "build-modules" only tells TypeScript how to resolve the typing file for @wordpress/data. We could keep these types released but "unplugged" by having the "types": "build-modules" line inside of this repository but not in the released packages. A small webpack plugin could get us there, I'm thinking about something that would see the following lines in package.json:

{
    "types": "build-modules",
    "removeTypesResolutionOnBuild": true
}

And remove the "types": "build-modules" line from package.json.

but all the cross-package store imports still come across as any.
Any idea how we could solve this in the future?

We'd have to add tsconfig.json and "types": "build-modules" to each of these packages. We'll get there step by step.

@adamziel
Copy link
Contributor Author

adamziel commented Jun 27, 2022

Actually, a webpack plugin won't cut it as the package.json is bundled straight from packages/data/package.json and not from any intermediate directory with build artifacts. I can only think of one way of removing the "types": "build-types" on build: Adding an npm postpack hook that would rewrite the package.json inside of the final .tgz bundle.

@kevin940726
Copy link
Member

kevin940726 commented Jun 28, 2022

The reason I wanted to avoid releasing was to test-drive these types internally and make any necessary adjustments before releasing them to the world.

Well then, maybe we could take this another way around. Don't add the types field in package.json. Instead, referencing the types of the package to the directory at the project level. For instance, add a @wordpress/core-data.d.ts file in the typings folder and re-export all of the types in build-types. No idea if that would work though 😅

IMO, I don't think we have to go all the way just to experiment with the types. For people not using TypeScript, the change doesn't matter to them. For people using TypeScript, they probably already have a custom config to ignore the type of the package anyway. I'd prefer just releasing the types in a minor release as a feature 😅. c.c. @gziolo for other concerns I missed though.

@adamziel
Copy link
Contributor Author

For people using TypeScript, they probably already have a custom config to ignore the type of the package anyway

I'd love that to be the case, but how do you know?

Also, I just realized this would be a breaking change as right now the typescript reads the types from the DefinitelyTyped repo whereas after this PR it would start reading them from the data package. The culprit is the two are not compatible :(

Also interested in your thoughts @dmsnell and @sarayourfriend

@adamziel
Copy link
Contributor Author

adamziel commented Jun 29, 2022

Unfortunately, updating the tarball won't work. Lerna creates a temporary file with a random name and does not pass its path to postpack:

https://github.com/lerna/lerna/blob/8ca18bedecf4f141c6242a099086e84b2ced72de/utils/pack-directory/lib/pack-directory.js#L63-L70

Which means we can do either of:

  • Publish the npm packages with the types key in the package.json, as @kevin940726 suggested
  • Experiment with a @wordpress/core-data.d.ts file, also as @kevin940726 suggested
  • Remove the "types" from package.json before the build and restore it after the build. It sounds fragile, though.
  • Rework the entire build pipeline. Let's just say I'd rather not.

I'd love to hear more opinions here.

@adamziel adamziel requested a review from ntwb as a code owner July 6, 2022 15:13
@adamziel
Copy link
Contributor Author

adamziel commented Jul 6, 2022

@kevin940726 I ended up going through with the ambient module declaration to enable this just in the Gutenberg repository for now. Would you be up for a re-review? Also cc @sirbrillig

@@ -0,0 +1,3 @@
declare module '@wordpress/data' {
export * from '@wordpress/data/build-types/index';
Copy link
Member

Choose a reason for hiding this comment

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

how does this play with the issue of having a global DefinitelyTyped package in for @wordpress/data?

Copy link
Contributor Author

@adamziel adamziel Jul 6, 2022

Choose a reason for hiding this comment

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

This overrides the DefinitelyTyped types thanks to the "typeRoots": [ "./typings", "./node_modules/@types" ], setting in tsconfig.json.

Copy link
Member

@dmsnell dmsnell left a comment

Choose a reason for hiding this comment

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

Let's see how this goes.

@adamziel adamziel merged commit 62a2fa1 into trunk Jul 7, 2022
@adamziel adamziel deleted the ts/enable-useselect-autocompletion-support-for-a-few-packages branch July 7, 2022 10:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Developer Experience Ideas about improving block and theme developer experience [Package] Data /packages/data
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants