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

Refactor getDiscussion #10361

Merged
merged 4 commits into from
Jan 26, 2024
Merged

Refactor getDiscussion #10361

merged 4 commits into from
Jan 26, 2024

Conversation

mxdvl
Copy link
Contributor

@mxdvl mxdvl commented Jan 26, 2024

What does this change?

  • More accurate parsing and safer error handling in getDiscussion
  • introduce Result which is a discriminated union with a success and failure variant
  • introduce fetchJSON which returns a Result<'ApiError' | 'NetworkError', unknown>, and allows safely deserialising any JSON from a URL

Why?

Part of #8745

Screenshots

No change (tested locally)

@mxdvl mxdvl requested a review from JamieB-gu January 26, 2024 13:42
@mxdvl mxdvl requested a review from a team as a code owner January 26, 2024 13:42
and safer error handling

See guardian/discussion-api for type definitions

Co-authored-by: Jamie B <[email protected]>
@mxdvl mxdvl force-pushed the discussion/getDiscussion-API-refactor branch from a959fb7 to fedd1fe Compare January 26, 2024 13:44
Copy link

github-actions bot commented Jan 26, 2024

Size Change: +543 B (0%)

Total Size: 750 kB

Filename Size Change
dotcom-rendering/dist/2132.client.web.********************.js 4.88 kB +267 B (+6%) 🔍
dotcom-rendering/dist/DiscussionContainer-importable.client.web.********************.js 23 kB +279 B (+1%)
ℹ️ View Unchanged
Filename Size Change
dotcom-rendering/dist/11.client.web.********************.js 5.78 kB 0 B
dotcom-rendering/dist/112.client.web.********************.js 823 B 0 B
dotcom-rendering/dist/1191.client.web.********************.js 679 B 0 B
dotcom-rendering/dist/1229.client.web.********************.js 8.67 kB 0 B
dotcom-rendering/dist/1407.client.web.********************.js 639 B 0 B
dotcom-rendering/dist/1412.client.web.********************.js 4.31 kB 0 B
dotcom-rendering/dist/1459.client.web.********************.js 877 B 0 B
dotcom-rendering/dist/1749.client.web.********************.js 920 B 0 B
dotcom-rendering/dist/1955.client.web.********************.js 4.71 kB 0 B
dotcom-rendering/dist/2276.client.web.********************.js 3.35 kB 0 B
dotcom-rendering/dist/2293.client.web.********************.js 581 B 0 B
dotcom-rendering/dist/307.client.web.********************.js 13.2 kB 0 B
dotcom-rendering/dist/3314.client.web.********************.js 4.76 kB 0 B
dotcom-rendering/dist/3375.client.web.********************.js 2.7 kB 0 B
dotcom-rendering/dist/3410.client.web.********************.js 2.68 kB 0 B
dotcom-rendering/dist/3889.client.web.********************.js 8.24 kB 0 B
dotcom-rendering/dist/393.client.web.********************.js 921 B 0 B
dotcom-rendering/dist/3958.client.web.********************.js 39.9 kB 0 B
dotcom-rendering/dist/3986.client.web.********************.js 496 B 0 B
dotcom-rendering/dist/4002.client.web.********************.js 4.59 kB 0 B
dotcom-rendering/dist/4040.client.web.********************.js 651 B 0 B
dotcom-rendering/dist/4045.client.web.********************.js 642 B 0 B
dotcom-rendering/dist/405.client.web.********************.js 915 B 0 B
dotcom-rendering/dist/4215.client.web.********************.js 409 B 0 B
dotcom-rendering/dist/4219.client.web.********************.js 5.74 kB 0 B
dotcom-rendering/dist/4265.client.web.********************.js 2.38 kB 0 B
dotcom-rendering/dist/4269.client.web.********************.js 667 B 0 B
dotcom-rendering/dist/4298.client.web.********************.js 8.41 kB 0 B
dotcom-rendering/dist/4390.client.web.********************.js 507 B 0 B
dotcom-rendering/dist/4438.client.web.********************.js 802 B 0 B
dotcom-rendering/dist/4442.client.web.********************.js 712 B 0 B
dotcom-rendering/dist/478.client.web.********************.js 594 B 0 B
dotcom-rendering/dist/4870.client.web.********************.js 747 B 0 B
dotcom-rendering/dist/4911.client.web.********************.js 780 B 0 B
dotcom-rendering/dist/4982.client.web.********************.js 3.82 kB 0 B
dotcom-rendering/dist/5020.client.web.********************.js 994 B 0 B
dotcom-rendering/dist/5041.client.web.********************.js 3.76 kB 0 B
dotcom-rendering/dist/5047.client.web.********************.js 779 B 0 B
dotcom-rendering/dist/5144.client.web.********************.js 5.08 kB 0 B
dotcom-rendering/dist/5242.client.web.********************.js 529 B 0 B
dotcom-rendering/dist/5290.client.web.********************.js 3.24 kB 0 B
dotcom-rendering/dist/5499.client.web.********************.js 2.47 kB 0 B
dotcom-rendering/dist/5619.client.web.********************.js 926 B 0 B
dotcom-rendering/dist/5730.client.web.********************.js 954 B 0 B
dotcom-rendering/dist/5772.client.web.********************.js 9.97 kB 0 B
dotcom-rendering/dist/5957.client.web.********************.js 5.93 kB 0 B
dotcom-rendering/dist/5985.client.web.********************.js 748 B 0 B
dotcom-rendering/dist/6043.client.web.********************.js 852 B 0 B
dotcom-rendering/dist/6140.client.web.********************.js 852 B 0 B
dotcom-rendering/dist/6651.client.web.********************.js 905 B 0 B
dotcom-rendering/dist/6693.client.web.********************.js 823 B 0 B
dotcom-rendering/dist/6756.client.web.********************.js 525 B 0 B
dotcom-rendering/dist/6853.client.web.********************.js 1 kB 0 B
dotcom-rendering/dist/7018.client.web.********************.js 787 B 0 B
dotcom-rendering/dist/7167.client.web.********************.js 16.5 kB 0 B
dotcom-rendering/dist/7329.client.web.********************.js 2.77 kB 0 B
dotcom-rendering/dist/7356.client.web.********************.js 1 kB 0 B
dotcom-rendering/dist/7554.client.web.********************.js 3.27 kB 0 B
dotcom-rendering/dist/7629.client.web.********************.js 2.87 kB 0 B
dotcom-rendering/dist/7855.client.web.********************.js 787 B 0 B
dotcom-rendering/dist/7983.client.web.********************.js 3.1 kB 0 B
dotcom-rendering/dist/8002.client.web.********************.js 801 B 0 B
dotcom-rendering/dist/8113.client.web.********************.js 3.48 kB 0 B
dotcom-rendering/dist/8288.client.web.********************.js 23 kB 0 B
dotcom-rendering/dist/8310.client.web.********************.js 3.74 kB 0 B
dotcom-rendering/dist/8344.client.web.********************.js 1.56 kB 0 B
dotcom-rendering/dist/8388.client.web.********************.js 618 B 0 B
dotcom-rendering/dist/841.client.web.********************.js 788 B 0 B
dotcom-rendering/dist/8784.client.web.********************.js 5.09 kB 0 B
dotcom-rendering/dist/8818.client.web.********************.js 746 B 0 B
dotcom-rendering/dist/8937.client.web.********************.js 888 B 0 B
dotcom-rendering/dist/9004.client.web.********************.js 5.85 kB 0 B
dotcom-rendering/dist/9106.client.web.********************.js 2.93 kB 0 B
dotcom-rendering/dist/9173.client.web.********************.js 724 B 0 B
dotcom-rendering/dist/9314.client.web.********************.js 823 B 0 B
dotcom-rendering/dist/9343.client.web.********************.js 2.98 kB 0 B
dotcom-rendering/dist/9458.client.web.********************.js 4.82 kB 0 B
dotcom-rendering/dist/9529.client.web.********************.js 3.24 kB 0 B
dotcom-rendering/dist/958.client.web.********************.js 3.17 kB 0 B
dotcom-rendering/dist/9591.client.web.********************.js 1.85 kB 0 B
dotcom-rendering/dist/9621.client.web.********************.js 719 B 0 B
dotcom-rendering/dist/9676.client.web.********************.js 888 B 0 B
dotcom-rendering/dist/9856.client.web.********************.js 5.75 kB 0 B
dotcom-rendering/dist/9879.client.web.********************.js 3.38 kB 0 B
dotcom-rendering/dist/9978.client.web.********************.js 960 B 0 B
dotcom-rendering/dist/AdPortals-importable.client.web.********************.js 3.72 kB 0 B
dotcom-rendering/dist/AlreadyVisited-importable.client.web.********************.js 425 B 0 B
dotcom-rendering/dist/AppsEpic-importable.client.web.********************.js 4.09 kB 0 B
dotcom-rendering/dist/AppsFooter-importable.client.web.********************.js 3.57 kB 0 B
dotcom-rendering/dist/AppsLightboxImage-importable.client.web.********************.js 3 kB 0 B
dotcom-rendering/dist/AppsLightboxImageStore-importable.client.web.********************.js 2.42 kB 0 B
dotcom-rendering/dist/AudioAtomWrapper-importable.client.web.********************.js 3.58 kB 0 B
dotcom-rendering/dist/AustralianTerritorySwitcher-importable.client.web.********************.js 2.01 kB 0 B
dotcom-rendering/dist/Branding-importable.client.web.********************.js 2.54 kB 0 B
dotcom-rendering/dist/braze-web-sdk-core.client.web.********************.js 36.9 kB 0 B
dotcom-rendering/dist/BrazeMessaging-importable.client.web.********************.js 5.26 kB 0 B
dotcom-rendering/dist/CalloutBlockComponent-importable.client.web.********************.js 6.75 kB 0 B
dotcom-rendering/dist/CalloutEmbedBlockComponent-importable.client.web.********************.js 5.76 kB 0 B
dotcom-rendering/dist/CardCommentCount-importable.client.web.********************.js 4.43 kB 0 B
dotcom-rendering/dist/Carousel-importable.client.web.********************.js 5.52 kB 0 B
dotcom-rendering/dist/CarouselForNewsletters-importable.client.web.********************.js 5.65 kB 0 B
dotcom-rendering/dist/ChartAtom-importable.client.web.********************.js 541 B 0 B
dotcom-rendering/dist/CommentCount-importable.client.web.********************.js 3.24 kB 0 B
dotcom-rendering/dist/DiscussionMeta-importable.client.web.********************.js 4.01 kB 0 B
dotcom-rendering/dist/DocumentBlockComponent-importable.client.web.********************.js 3.57 kB 0 B
dotcom-rendering/dist/EmbedBlockComponent-importable.client.web.********************.js 4.13 kB 0 B
dotcom-rendering/dist/EnhancePinnedPost-importable.client.web.********************.js 2.01 kB 0 B
dotcom-rendering/dist/FetchOnwardsData-importable.client.web.********************.js 2.55 kB 0 B
dotcom-rendering/dist/FilterKeyEventsToggle-importable.client.web.********************.js 3.35 kB 0 B
dotcom-rendering/dist/FocusStyles-importable.client.web.********************.js 609 B 0 B
dotcom-rendering/dist/FollowWrapper-importable.client.web.********************.js 789 B 0 B
dotcom-rendering/dist/FooterLabel-importable.client.web.********************.js 341 B 0 B
dotcom-rendering/dist/frameworks.client.web.********************.js 20.7 kB 0 B
dotcom-rendering/dist/GetCricketScoreboard-importable.client.web.********************.js 3.76 kB 0 B
dotcom-rendering/dist/GetMatchNav-importable.client.web.********************.js 10.7 kB 0 B
dotcom-rendering/dist/GetMatchStats-importable.client.web.********************.js 1.63 kB 0 B
dotcom-rendering/dist/GetMatchTabs-importable.client.web.********************.js 2.62 kB 0 B
dotcom-rendering/dist/guardian-braze-components-banner.client.web.********************.js 14.7 kB 0 B
dotcom-rendering/dist/guardian-braze-components-end-of-article.client.web.********************.js 9.29 kB 0 B
dotcom-rendering/dist/GuideAtomWrapper-importable.client.web.********************.js 781 B 0 B
dotcom-rendering/dist/HeaderTopBar-importable.client.web.********************.js 10.9 kB 0 B
dotcom-rendering/dist/index.client.web.********************.js 47.2 kB -3 B (0%)
dotcom-rendering/dist/InstagramBlockComponent-importable.client.web.********************.js 3.67 kB 0 B
dotcom-rendering/dist/InteractiveBlockComponent-importable.client.web.********************.js 6.09 kB 0 B
dotcom-rendering/dist/InteractiveContentsBlockComponent-importable.client.web.********************.js 4.66 kB 0 B
dotcom-rendering/dist/InteractiveSupportButton-importable.client.web.********************.js 3.45 kB 0 B
dotcom-rendering/dist/KeyEventsCarousel-importable.client.web.********************.js 4.55 kB 0 B
dotcom-rendering/dist/KnowledgeQuizAtom-importable.client.web.********************.js 3.54 kB 0 B
dotcom-rendering/dist/LatestLinks-importable.client.web.********************.js 2.13 kB 0 B
dotcom-rendering/dist/LightboxHash-importable.client.web.********************.js 433 B 0 B
dotcom-rendering/dist/LightboxLayout-importable.client.web.********************.js 6.46 kB 0 B
dotcom-rendering/dist/LiveBlogEpic-importable.client.web.********************.js 3.59 kB 0 B
dotcom-rendering/dist/Liveness-importable.client.web.********************.js 4.93 kB 0 B
dotcom-rendering/dist/ManyNewsletterSignUp-importable.client.web.********************.js 6.61 kB 0 B
dotcom-rendering/dist/MapEmbedBlockComponent-importable.client.web.********************.js 5.66 kB 0 B
dotcom-rendering/dist/Metrics-importable.client.web.********************.js 2.29 kB 0 B
dotcom-rendering/dist/MostViewedFooter-importable.client.web.********************.js 4.04 kB 0 B
dotcom-rendering/dist/MostViewedFooterData-importable.client.web.********************.js 6.74 kB 0 B
dotcom-rendering/dist/MostViewedRightWrapper-importable.client.web.********************.js 4.45 kB 0 B
dotcom-rendering/dist/OnwardsUpper-importable.client.web.********************.js 4.26 kB 0 B
dotcom-rendering/dist/PersonalityQuizAtom-importable.client.web.********************.js 3.65 kB 0 B
dotcom-rendering/dist/ProfileAtom-importable.client.web.********************.js 543 B 0 B
dotcom-rendering/dist/ProfileAtomWrapper-importable.client.web.********************.js 802 B 0 B
dotcom-rendering/dist/PulsingDot-importable.client.web.********************.js 749 B 0 B
dotcom-rendering/dist/QandaAtom-importable.client.web.********************.js 539 B 0 B
dotcom-rendering/dist/ReaderRevenueDev-importable.client.web.********************.js 470 B 0 B
dotcom-rendering/dist/readerRevenueDevUtils.client.web.********************.js 1.89 kB 0 B
dotcom-rendering/dist/ReaderRevenueLinks-importable.client.web.********************.js 5.77 kB 0 B
dotcom-rendering/dist/RelativeTime-importable.client.web.********************.js 1.99 kB 0 B
dotcom-rendering/dist/RichLinkComponent-importable.client.web.********************.js 6.21 kB 0 B
dotcom-rendering/dist/SecureSignup-importable.client.web.********************.js 3.5 kB 0 B
dotcom-rendering/dist/SendAMessage-importable.client.web.********************.js 4.39 kB 0 B
dotcom-rendering/dist/SendTargetingParams-importable.client.web.********************.js 2.11 kB 0 B
dotcom-rendering/dist/sentry.client.web.********************.js 771 B 0 B
dotcom-rendering/dist/SetABTests-importable.client.web.********************.js 3.37 kB 0 B
dotcom-rendering/dist/SetAdTargeting-importable.client.web.********************.js 481 B 0 B
dotcom-rendering/dist/shimport.client.web.********************.js 2.79 kB 0 B
dotcom-rendering/dist/ShowHideContainers-importable.client.web.********************.js 646 B 0 B
dotcom-rendering/dist/ShowMore-importable.client.web.********************.js 5.71 kB 0 B
dotcom-rendering/dist/SignInGateMain.client.web.********************.js 3.9 kB 0 B
dotcom-rendering/dist/SignInGateMainCheckoutComplete.client.web.********************.js 5 kB 0 B
dotcom-rendering/dist/SignInGateSelector-importable.client.web.********************.js 5.63 kB 0 B
dotcom-rendering/dist/SlotBodyEnd-importable.client.web.********************.js 6.83 kB 0 B
dotcom-rendering/dist/SpotifyBlockComponent-importable.client.web.********************.js 5.49 kB 0 B
dotcom-rendering/dist/StickyBottomBanner-importable.client.web.********************.js 5.37 kB 0 B
dotcom-rendering/dist/SubNav-importable.client.web.********************.js 2.24 kB 0 B
dotcom-rendering/dist/SupportTheG-importable.client.web.********************.js 5.89 kB 0 B
dotcom-rendering/dist/TableOfContents-importable.client.web.********************.js 3.1 kB 0 B
dotcom-rendering/dist/TimelineAtom-importable.client.web.********************.js 1.24 kB 0 B
dotcom-rendering/dist/TweetBlockComponent-importable.client.web.********************.js 1.02 kB 0 B
dotcom-rendering/dist/UnsafeEmbedBlockComponent-importable.client.web.********************.js 3.68 kB 0 B
dotcom-rendering/dist/VideoFacebookBlockComponent-importable.client.web.********************.js 5.66 kB 0 B
dotcom-rendering/dist/VineBlockComponent-importable.client.web.********************.js 3.51 kB 0 B
dotcom-rendering/dist/WeatherWrapper-importable.client.web.********************.js 5.45 kB 0 B
dotcom-rendering/dist/YoutubeBlockComponent-importable.client.web.********************.js 3.9 kB 0 B

compressed-size-action

Copy link
Contributor

@JamieB-gu JamieB-gu left a comment

Choose a reason for hiding this comment

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

👍 nice.

Couple of thoughts occurred to me while reading back through.

})
.catch((e) => console.error(`getDiscussion - error: ${String(e)}`));
.catch(() => {
// do nothing
Copy link
Contributor

Choose a reason for hiding this comment

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

I wonder if there's a way we can still allow errors to be reported? Our getDiscussion code could still crash, or the then callback here could crash, and this would suppress either of those errors?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point, we should use window.guardian.sentry.reportError.

This could drastically increase the number of errors, though, so we’d want to do this in a separate PR

dotcom-rendering/src/lib/discussionApi.tsx Outdated Show resolved Hide resolved
dotcom-rendering/src/lib/discussionApi.tsx Outdated Show resolved Hide resolved
@mxdvl mxdvl added the run_chromatic Runs chromatic when label is applied label Jan 26, 2024
@mxdvl mxdvl merged commit 161204d into main Jan 26, 2024
28 checks passed
@mxdvl mxdvl deleted the discussion/getDiscussion-API-refactor branch January 26, 2024 16:34
@prout-bot
Copy link

Seen on PROD (merged by @mxdvl 7 minutes and 53 seconds ago) Please check your changes!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dotcom-rendering run_chromatic Runs chromatic when label is applied Seen-on-PROD
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants