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

Types: Hide element, primitives, icons declarations #21613

Merged
merged 3 commits into from
Apr 15, 2020

Conversation

sirreal
Copy link
Member

@sirreal sirreal commented Apr 15, 2020

Remove types from pacakge.json to hide the included types. This was
reported to cause conflicts with the current 3rd party typings published
on DefinitelyTyped (DT).

The cause has been identified as:

  • DT exports all React typings, which other DT typings depend on.
  • Included typings use type aliases (Element -> WPElement) which may
    cause additional conflicts.

The @wordpress/primitives and @wordpress/icons packages depend on @wordpress/element, so their types have been disabled as well.

See https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/wordpress__element/index.d.ts
See https://unpkg.com/browse/@wordpress/element@2.13.0/build-types/react.d.ts

Reported by @dsifford via core-js slack:

https://wordpress.slack.com/archives/C5UNMSU4R/p1586955177257000

Remove types from pacakge.json to hide the included types. This was
reported to cause conflicts with the current 3rd party typings published
on DefinitelyTyped (DT).

The cause has been identified as:
- DT exports all React typings, which other DT typings depend on.
- Included typings use type aliases (Element -> WPElement) which may
  cause additional conflicts.

See https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/wordpress__element/index.d.ts
See https://unpkg.com/browse/@wordpress/element@2.13.0/build-types/react.d.ts

Reported via core-js slack:

https://wordpress.slack.com/archives/C5UNMSU4R/p1586955177257000
@sirreal sirreal changed the title "Unpublish" @wordpress/element build-types Element: Hide @wordpress/element build-types Apr 15, 2020
@sirreal sirreal self-assigned this Apr 15, 2020
@sirreal sirreal added the [Package] Element /packages/element label Apr 15, 2020
@aduth
Copy link
Member

aduth commented Apr 15, 2020

Can we include a brief CHANGELOG note? For those looking to upgrade again after the latest round of published updates.

@sirreal
Copy link
Member Author

sirreal commented Apr 15, 2020

Added a changelog entry.

@sirreal
Copy link
Member Author

sirreal commented Apr 15, 2020

We'll end up having to back out more types if we go with this approach 😞

I believe this will cascade into primitives and icons.

@github-actions
Copy link

Size Change: 0 B

Total Size: 839 kB

ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.02 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 4.01 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.24 kB 0 B
build/block-directory/style-rtl.css 760 B 0 B
build/block-directory/style.css 760 B 0 B
build/block-editor/index.js 105 kB 0 B
build/block-editor/style-rtl.css 10.2 kB 0 B
build/block-editor/style.css 10.2 kB 0 B
build/block-library/editor-rtl.css 7.1 kB 0 B
build/block-library/editor.css 7.09 kB 0 B
build/block-library/index.js 112 kB 0 B
build/block-library/style-rtl.css 7.14 kB 0 B
build/block-library/style.css 7.15 kB 0 B
build/block-library/theme-rtl.css 683 B 0 B
build/block-library/theme.css 685 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 57.7 kB 0 B
build/components/index.js 198 kB 0 B
build/components/style-rtl.css 16.6 kB 0 B
build/components/style.css 16.6 kB 0 B
build/compose/index.js 6.66 kB 0 B
build/core-data/index.js 11.1 kB 0 B
build/data-controls/index.js 1.25 kB 0 B
build/data/index.js 8.43 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 3.1 kB 0 B
build/edit-navigation/index.js 3.1 kB 0 B
build/edit-navigation/style-rtl.css 279 B 0 B
build/edit-navigation/style.css 280 B 0 B
build/edit-post/index.js 27.8 kB 0 B
build/edit-post/style-rtl.css 12.3 kB 0 B
build/edit-post/style.css 12.3 kB 0 B
build/edit-site/index.js 10.4 kB 0 B
build/edit-site/style-rtl.css 5.02 kB 0 B
build/edit-site/style.css 5.02 kB 0 B
build/edit-widgets/index.js 7.53 kB 0 B
build/edit-widgets/style-rtl.css 4.65 kB 0 B
build/edit-widgets/style.css 4.64 kB 0 B
build/editor/editor-styles-rtl.css 428 B 0 B
build/editor/editor-styles.css 431 B 0 B
build/editor/index.js 43.3 kB 0 B
build/editor/style-rtl.css 3.48 kB 0 B
build/editor/style.css 3.47 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.32 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.91 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 5.28 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.67 kB 0 B
build/primitives/index.js 1.49 kB 0 B
build/priority-queue/index.js 788 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/rich-text/index.js 14.8 kB 0 B
build/server-side-render/index.js 2.67 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.01 kB 0 B
build/viewport/index.js 1.84 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@sirreal sirreal changed the title Element: Hide @wordpress/element build-types Types: Hide element, primitives, icons declarations Apr 15, 2020
@sirreal sirreal added [Package] Icons /packages/icons [Package] Primitives /packages/primitives labels Apr 15, 2020
@sirreal sirreal merged commit c2684b2 into master Apr 15, 2020
@sirreal sirreal deleted the remove/wp-element-types branch April 15, 2020 15:02
@github-actions github-actions bot added this to the Gutenberg 8.0 milestone Apr 15, 2020
gziolo pushed a commit that referenced this pull request Apr 15, 2020
Unpublish @wordpress/element, @wordpress/primitives, and @wordpress/icons types

Remove types from pacakge.json to hide the included types. This was
reported to cause conflicts with the current 3rd party typings published
on DefinitelyTyped (DT).

The cause has been identified as:
- DT exports all React typings, which other DT typings depend on.
- Included typings use type aliases (Element -> WPElement) which may
  cause additional conflicts.

See https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/wordpress__element/index.d.ts
See https://unpkg.com/browse/@wordpress/element@2.13.0/build-types/react.d.ts

Reported via core-js slack:

https://wordpress.slack.com/archives/C5UNMSU4R/p1586955177257000

* Add CHANGELOG

* Remove primitives, icons types
sirreal added a commit that referenced this pull request Apr 15, 2020
@aduth
Copy link
Member

aduth commented Apr 16, 2020

An unfortunate side-effect of this is that we can't even use these package types internally. I sense this is what you'd noticed in needing to remove primitives and icons as well.

Looking at our implementation prior to #18942, I was wondering if there's something we could be doing similar to what we had with this now-removed configuration:

https://github.com/WordPress/gutenberg/pull/18942/files#diff-e5e546dd2eb0351f813d63d1b39dbc48L13

I'm running into errors at #21467 due to lack of availability of @wordpress/element types. I've noticed locally that I can get them working again with this change:

diff --git a/packages/block-editor/tsconfig.json b/packages/block-editor/tsconfig.json
index aa711da37..57fcd356d 100644
--- a/packages/block-editor/tsconfig.json
+++ b/packages/block-editor/tsconfig.json
@@ -2,7 +2,14 @@
 	"extends": "../../tsconfig.base.json",
 	"compilerOptions": {
 		"rootDir": "src",
-		"declarationDir": "build-types"
+		"declarationDir": "build-types",
+		"baseUrl": "../..",
+		"paths": {
+			"@wordpress/*": [
+				"packages/*/index.js",
+				"packages/*/src/index.js"
+			]
+		},
 	},
 	"references": [
 		{ "path": "../element" },

Do you think that's a sensible temporary solution to be able to use these types internally?

For now, I'll probably back out my type-checking changes in #21467.

@sirreal
Copy link
Member Author

sirreal commented Apr 17, 2020

I hope to get back to this with some proposals in the next few days.

  • First, to unblock type work within Gutenberg
  • Second, to find a way to deal with the cause of conflicts with DefinitelyTyped, which may involve more thought 🙂

Thanks for the patience.

@sirreal
Copy link
Member Author

sirreal commented Apr 21, 2020

I've opened #21767 to discuss details and how to proceed.

sirreal added a commit that referenced this pull request Apr 22, 2020
[#21613](#21613) "hid"
TypeScript emitted type declarations for `@wordpress/element` when it
was found to conflict with 3rd party type declarations on
DefinitelyTyped.

Disabling `@wordpress/element` cascaded to require disabling type
checking for `@wordpress/icons` and `@wordpress/primitives`, two
dependent packages.

The lint-staged flow is slightly different from the full
`build:package-types` script in that it attempts to do a minimal build
in the interest of speed. This flow checks for the presence of a
`tsconfig.json` file in the root of the package with changes and runs
its package build.

While removing the affected packages from the main tsconfig.json did
remove them from the primary build, changes to primitives and icons
packages will fail because they cannot find the `@wordpress/element`
types as was intended in #21613.

By renaming the package tsconfig.json files, they are excluded from the
lint-staged typechecking as well.
sirreal added a commit that referenced this pull request Apr 22, 2020
[#21613](#21613) "hid"
TypeScript emitted type declarations for `@wordpress/element` when it
was found to conflict with 3rd party type declarations on
DefinitelyTyped.

Disabling `@wordpress/element` cascaded to require disabling type
checking for `@wordpress/icons` and `@wordpress/primitives`, two
dependent packages.

The lint-staged flow is slightly different from the full
`build:package-types` script in that it attempts to do a minimal build
in the interest of speed. This flow checks for the presence of a
`tsconfig.json` file in the root of the package with changes and runs
its package build.

While removing the affected packages from the main tsconfig.json did
remove them from the primary build, changes to primitives and icons
packages will fail because they cannot find the `@wordpress/element`
types as was intended in #21613.

By renaming the package tsconfig.json files, they are excluded from the
lint-staged typechecking as well.
sirreal added a commit that referenced this pull request Apr 28, 2020
* Restore element, icons, primitives types
* Partially reverts #21613 (c2684b2)
* Reverts #21784 (74fcd4c)

Some `@wordpress/*` emit TypeScript type declarations and include them with the published packages. Shortly after publishing, it was discovered the `@wordpress/element` conflicted with the DefinitelyTyped 3rd party type declarations of several packages and a patch release was published removing the published types from `@wordpress/element`, `@wordpress/primitives`, and `@wordpress/icons` (#21613, #21784).

The DefinitelyTyped type declarations have been updated to remove conflicts with the included `@wordpress/element` types. The types can be published again.

See #21767 for more details.
aduth added a commit that referenced this pull request Apr 30, 2020
* Rename icons, primitives tsconfig to _tsconfig

[#21613](#21613) "hid"
TypeScript emitted type declarations for `@wordpress/element` when it
was found to conflict with 3rd party type declarations on
DefinitelyTyped.

Disabling `@wordpress/element` cascaded to require disabling type
checking for `@wordpress/icons` and `@wordpress/primitives`, two
dependent packages.

The lint-staged flow is slightly different from the full
`build:package-types` script in that it attempts to do a minimal build
in the interest of speed. This flow checks for the presence of a
`tsconfig.json` file in the root of the package with changes and runs
its package build.

While removing the affected packages from the main tsconfig.json did
remove them from the primary build, changes to primitives and icons
packages will fail because they cannot find the `@wordpress/element`
types as was intended in #21613.

By renaming the package tsconfig.json files, they are excluded from the
lint-staged typechecking as well.

* Update arrow-left, cog, and help icons

* Add "bar chart" icon

* Add "home" icon

* Add "megaphone" icon

* Add "people" icon

* Add "plugin" icon

* Add "support" icon

* Add "tool" icon

* icon definitions

* Update "support" icon dimensions and rename to "lifesaver"

* Update star icons

Replaces old Dashicons stars with g2 equivalents

* Update star icon dimensions

* star-half viewbox

* E2E Tests: Update Plugins snapshots

* Camelcase Path attributes

* Update "tool" icon

* Update icons package changelog

* Update packages/icons/package.json

Co-authored-by: Andrew Duthie <andrew@andrewduthie.com>

* Update packages/icons/CHANGELOG.md

Co-authored-by: Andrew Duthie <andrew@andrewduthie.com>

Co-authored-by: Jon Surrell <jon.surrell@automattic.com>
Co-authored-by: Andrew Duthie <andrew@andrewduthie.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Element /packages/element [Package] Icons /packages/icons [Package] Primitives /packages/primitives
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants