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

Date: Update moment-timezone package to support string timezones #22866

Merged
merged 1 commit into from
Sep 3, 2020

Conversation

ryelle
Copy link
Contributor

@ryelle ryelle commented Jun 3, 2020

Description

Fixes #22193. Sites with string timezones throw errors because the timezone is not recognized by moment. This issue isn't present in core, because the moment-timezone used in core is a higher version, which correctly loads all the timezones.

I moved the required version all the way to current, 0.5.31.

@gziolo This undoes the optimization from #12356, bringing the built date size back up to ~200K… but it seems we do need these timezones defined after all (see #22193 (comment))

How has this been tested?

The unit tests still pass, this was only an issue in the browser. Change your site to use a string timezone by picking a city from the site options dropdown. Load the editor, add a Latest Posts block, and toggle on the date display. On master, you'll get a series of console errors about the date. Switch to this branch, install & build, they should be fixed.

Alternately, check the timezones moment supports with moment.tz.names(). On master, only WP is shown.

Types of changes

Bug fix (non-breaking change which fixes an issue)

@ryelle ryelle added the [Package] Date /packages/date label Jun 3, 2020
@ryelle ryelle requested review from iandunn and gziolo June 3, 2020 18:07
@ryelle ryelle self-assigned this Jun 3, 2020
@github-actions
Copy link

github-actions bot commented Jun 3, 2020

Size Change: 0 B

Total Size: 1.2 MB

ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.67 kB 0 B
build/api-fetch/index.js 3.41 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 7.99 kB 0 B
build/block-directory/style-rtl.css 953 B 0 B
build/block-directory/style.css 952 B 0 B
build/block-editor/index.js 128 kB 0 B
build/block-editor/style-rtl.css 11.1 kB 0 B
build/block-editor/style.css 11.1 kB 0 B
build/block-library/editor-rtl.css 8.55 kB 0 B
build/block-library/editor.css 8.55 kB 0 B
build/block-library/index.js 137 kB 0 B
build/block-library/style-rtl.css 7.47 kB 0 B
build/block-library/style.css 7.47 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 742 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 47.7 kB 0 B
build/components/index.js 200 kB 0 B
build/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.5 kB 0 B
build/compose/index.js 9.67 kB 0 B
build/core-data/index.js 12.3 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.55 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 4.48 kB 0 B
build/edit-navigation/index.js 11.7 kB 0 B
build/edit-navigation/style-rtl.css 1.16 kB 0 B
build/edit-navigation/style.css 1.16 kB 0 B
build/edit-post/index.js 305 kB 0 B
build/edit-post/style-rtl.css 6.26 kB 0 B
build/edit-post/style.css 6.25 kB 0 B
build/edit-site/index.js 17.1 kB 0 B
build/edit-site/style-rtl.css 3.06 kB 0 B
build/edit-site/style.css 3.06 kB 0 B
build/edit-widgets/index.js 12 kB 0 B
build/edit-widgets/style-rtl.css 2.46 kB 0 B
build/edit-widgets/style.css 2.45 kB 0 B
build/editor/editor-styles-rtl.css 492 B 0 B
build/editor/editor-styles.css 493 B 0 B
build/editor/index.js 45.6 kB 0 B
build/editor/style-rtl.css 3.81 kB 0 B
build/editor/style.css 3.81 kB 0 B
build/element/index.js 4.64 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.71 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 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.57 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.32 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 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.41 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 13.9 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@youknowriad
Copy link
Contributor

I think ideally, we shouldn't rely on moment and find an alternative. We'd save both timezone bundle sizes and the library's bundle size too (as it's a huge one). I know it's not an easy task but if I remember properly we tried to avoid making it visible in the public API so it should be possible.

The fact that moment is a global that any plugin can tweak (change timezone...) is problematic.

@ryelle
Copy link
Contributor Author

ryelle commented Jun 5, 2020

@youknowriad has there been past discussion on alternatives? I agree there are enough downsides to moment that merit a switch, but for now, updating the version here would still be good to fix those timezone issues in the plugin.

@youknowriad
Copy link
Contributor

has there been past discussion on alternatives?

not a lot but the ones that come in discussions from time to time are date-fns or luxon

but for now, updating the version here would still be good to fix those timezone issues in the plugin.

Updating the version is fine. What is concerning for me is the bundle-size increase. moment-timezone is huge and ideally, we should try to avoid loading these.

@mkaz mkaz mentioned this pull request Jul 7, 2020
6 tasks
@obenland
Copy link
Member

obenland commented Jul 7, 2020

Have you considered passing in our own timezone data? Moment offers a 10-year bundle, we could split out that timezone data and load it in setupWPTimezone(). That should end up being even smaller than what was removed in #12356.

Something like this maybe: add/timezone-tooltip...try/add-timezone-data

@ryelle
Copy link
Contributor Author

ryelle commented Jul 8, 2020

Speaking just from the original purpose of this PR, I just wanted to catch Gutenberg up to core's moment version, because it fixed the timezone problem in #22193, and although it increased the bundle size of GB, wouldn't change wp core.

I don't know about importing in a file that core folks will need to keep updated, if we're going in that direction I feel like getting away from moment entirely would be better.

I see there was a PHP solution on #23400, I'll check that out to see if it also fixes the original issue that spawned this PR.

@youknowriad
Copy link
Contributor

Speaking just from the original purpose of this PR, I just wanted to catch Gutenberg up to core's moment version, because it fixed the timezone problem in #22193, and although it increased the bundle size of GB, wouldn't change wp core.

This is interesting, I thought we made sure Core don't load moment-timezone either cc @gziolo otherwise there's no point in preventing it just in the plugin.

And I'd definitely be in favor of moving away from moment if possible, that lib is doing more harm than good.

@youknowriad
Copy link
Contributor

I've been thinking about this and while I think we should definitely move away from moment, it doesn't make sense to keep the plugin lagging behind Core's version and if the optimization is just present on the plugin, it loses its value. So we should ensure we bring back the optim for both Core and the plugin separately.

@ryelle ryelle merged commit a3cd345 into master Sep 3, 2020
@ryelle ryelle deleted the update/date-moment-timezone branch September 3, 2020 20:44
@github-actions github-actions bot added this to the Gutenberg 9.0 milestone Sep 3, 2020
@youknowriad
Copy link
Contributor

Looks like this PR broke the Gutenberg storybook https://wordpress.github.io/gutenberg/
I didn't figure out yet how to solve it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Date /packages/date
Projects
None yet
Development

Successfully merging this pull request may close these issues.

dateI18n throws Moment error with String timezones
3 participants