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

Improve the Config context #11742

Merged
merged 7 commits into from
Jul 2, 2024
Merged

Improve the Config context #11742

merged 7 commits into from
Jul 2, 2024

Conversation

mxdvl
Copy link
Contributor

@mxdvl mxdvl commented Jun 27, 2024

What does this change?

  • make the config object ReadOnly so it’s not inadvertently mutated
  • reduce serialised size in the DOM by using a single JSON object
  • add the editionId to the config
  • use the pattern for LatestLinks and squash potential bugs

Why?

This pattern, introduced in #8704, has been very useful. This addressed initial concerns from @georgeblahblah, @ioanna0 and myself about redundant data in the HTML. Adding the edition can help reduce deeply drilled props, and reduce bugs, such as in CardAge

@mxdvl mxdvl added this to the Health milestone Jun 27, 2024
@mxdvl mxdvl requested a review from a team as a code owner June 27, 2024 08:57
Copy link

Hello 👋! When you're ready to run Chromatic, please apply the run_chromatic label to this PR.

You will need to reapply the label each time you want to run Chromatic.

Click here to see the Chromatic project.

Copy link

github-actions bot commented Jun 27, 2024

Size Change: -87 B (-0.01%)

Total Size: 867 kB

ℹ️ View Unchanged
Filename Size Change
dotcom-rendering/dist/1094.client.web.********************.js 6 kB -19 B (-0.32%)
dotcom-rendering/dist/1225.client.web.********************.js 785 B 0 B
dotcom-rendering/dist/1299.client.web.********************.js 937 B 0 B
dotcom-rendering/dist/1445.client.web.********************.js 18.1 kB 0 B
dotcom-rendering/dist/1543.client.web.********************.js 3.28 kB 0 B
dotcom-rendering/dist/1692.client.web.********************.js 3.13 kB 0 B
dotcom-rendering/dist/1762.client.web.********************.js 3.39 kB 0 B
dotcom-rendering/dist/1889.client.web.********************.js 3.63 kB 0 B
dotcom-rendering/dist/2170.client.web.********************.js 6.77 kB 0 B
dotcom-rendering/dist/2207.client.web.********************.js 2.98 kB 0 B
dotcom-rendering/dist/226.client.web.********************.js 3.93 kB 0 B
dotcom-rendering/dist/2264.client.web.********************.js 2.66 kB 0 B
dotcom-rendering/dist/2342.client.web.********************.js 1.01 kB 0 B
dotcom-rendering/dist/2344.client.web.********************.js 3.37 kB 0 B
dotcom-rendering/dist/2373.client.web.********************.js 11.5 kB -9 B (-0.08%)
dotcom-rendering/dist/2471.client.web.********************.js 723 B 0 B
dotcom-rendering/dist/2638.client.web.********************.js 3.37 kB 0 B
dotcom-rendering/dist/2692.client.web.********************.js 2.9 kB 0 B
dotcom-rendering/dist/2778.client.web.********************.js 858 B 0 B
dotcom-rendering/dist/2780.client.web.********************.js 6.42 kB 0 B
dotcom-rendering/dist/2920.client.web.********************.js 523 B 0 B
dotcom-rendering/dist/3000.client.web.********************.js 895 B 0 B
dotcom-rendering/dist/3114.client.web.********************.js 663 B 0 B
dotcom-rendering/dist/3118.client.web.********************.js 499 B 0 B
dotcom-rendering/dist/312.client.web.********************.js 2.93 kB 0 B
dotcom-rendering/dist/3255.client.web.********************.js 809 B 0 B
dotcom-rendering/dist/3336.client.web.********************.js 785 B 0 B
dotcom-rendering/dist/336.client.web.********************.js 13.4 kB 0 B
dotcom-rendering/dist/3371.client.web.********************.js 3.28 kB 0 B
dotcom-rendering/dist/3431.client.web.********************.js 5.53 kB 0 B
dotcom-rendering/dist/3494.client.web.********************.js 834 B 0 B
dotcom-rendering/dist/3523.client.web.********************.js 3.35 kB 0 B
dotcom-rendering/dist/3642.client.web.********************.js 791 B 0 B
dotcom-rendering/dist/3689.client.web.********************.js 4.3 kB 0 B
dotcom-rendering/dist/3787.client.web.********************.js 5.49 kB 0 B
dotcom-rendering/dist/3922.client.web.********************.js 731 B 0 B
dotcom-rendering/dist/393.client.web.********************.js 5.91 kB 0 B
dotcom-rendering/dist/3932.client.web.********************.js 790 B 0 B
dotcom-rendering/dist/4103.client.web.********************.js 22.6 kB 0 B
dotcom-rendering/dist/4129.client.web.********************.js 4.43 kB 0 B
dotcom-rendering/dist/424.client.web.********************.js 757 B 0 B
dotcom-rendering/dist/4442.client.web.********************.js 833 B 0 B
dotcom-rendering/dist/4639.client.web.********************.js 3 kB 0 B
dotcom-rendering/dist/4652.client.web.********************.js 3.59 kB 0 B
dotcom-rendering/dist/4666.client.web.********************.js 9.24 kB 0 B
dotcom-rendering/dist/4673.client.web.********************.js 731 B 0 B
dotcom-rendering/dist/4807.client.web.********************.js 4.3 kB 0 B
dotcom-rendering/dist/4811.client.web.********************.js 1.01 kB 0 B
dotcom-rendering/dist/5044.client.web.********************.js 811 B 0 B
dotcom-rendering/dist/5077.client.web.********************.js 441 B -1 B (-0.23%)
dotcom-rendering/dist/5084.client.web.********************.js 759 B 0 B
dotcom-rendering/dist/5127.client.web.********************.js 4.39 kB 0 B
dotcom-rendering/dist/5247.client.web.********************.js 2.86 kB 0 B
dotcom-rendering/dist/5308.client.web.********************.js 2.69 kB 0 B
dotcom-rendering/dist/5353.client.web.********************.js 12 kB 0 B
dotcom-rendering/dist/5536.client.web.********************.js 3.89 kB 0 B
dotcom-rendering/dist/565.client.web.********************.js 675 B 0 B
dotcom-rendering/dist/5750.client.web.********************.js 3.21 kB 0 B
dotcom-rendering/dist/5817.client.web.********************.js 922 B 0 B
dotcom-rendering/dist/6002.client.web.********************.js 3.09 kB 0 B
dotcom-rendering/dist/606.client.web.********************.js 3.53 kB 0 B
dotcom-rendering/dist/6093.client.web.********************.js 758 B 0 B
dotcom-rendering/dist/6167.client.web.********************.js 646 B 0 B
dotcom-rendering/dist/6351.client.web.********************.js 5.38 kB +21 B (+0.39%)
dotcom-rendering/dist/662.client.web.********************.js 2.67 kB 0 B
dotcom-rendering/dist/6640.client.web.********************.js 913 B 0 B
dotcom-rendering/dist/6793.client.web.********************.js 5.71 kB 0 B
dotcom-rendering/dist/6843.client.web.********************.js 7.29 kB 0 B
dotcom-rendering/dist/6908.client.web.********************.js 3.48 kB 0 B
dotcom-rendering/dist/6921.client.web.********************.js 2.99 kB 0 B
dotcom-rendering/dist/7062.client.web.********************.js 2.29 kB 0 B
dotcom-rendering/dist/7116.client.web.********************.js 23 kB 0 B
dotcom-rendering/dist/7196.client.web.********************.js 895 B 0 B
dotcom-rendering/dist/72.client.web.********************.js 966 B 0 B
dotcom-rendering/dist/7208.client.web.********************.js 2.41 kB 0 B
dotcom-rendering/dist/7265.client.web.********************.js 3.21 kB 0 B
dotcom-rendering/dist/7387.client.web.********************.js 961 B 0 B
dotcom-rendering/dist/7544.client.web.********************.js 3.07 kB 0 B
dotcom-rendering/dist/7660.client.web.********************.js 3.67 kB 0 B
dotcom-rendering/dist/7697.client.web.********************.js 620 B 0 B
dotcom-rendering/dist/7723.client.web.********************.js 925 B 0 B
dotcom-rendering/dist/8134.client.web.********************.js 601 B 0 B
dotcom-rendering/dist/8179.client.web.********************.js 834 B 0 B
dotcom-rendering/dist/8279.client.web.********************.js 43.1 kB 0 B
dotcom-rendering/dist/8363.client.web.********************.js 3.67 kB 0 B
dotcom-rendering/dist/8463.client.web.********************.js 156 B 0 B
dotcom-rendering/dist/8565.client.web.********************.js 653 B 0 B
dotcom-rendering/dist/8569.client.web.********************.js 3.58 kB 0 B
dotcom-rendering/dist/8791.client.web.********************.js 1.01 kB 0 B
dotcom-rendering/dist/8839.client.web.********************.js 3.37 kB 0 B
dotcom-rendering/dist/889.client.web.********************.js 860 B 0 B
dotcom-rendering/dist/8907.client.web.********************.js 792 B 0 B
dotcom-rendering/dist/9060.client.web.********************.js 886 B 0 B
dotcom-rendering/dist/9225.client.web.********************.js 583 B 0 B
dotcom-rendering/dist/9247.client.web.********************.js 3.83 kB 0 B
dotcom-rendering/dist/9287.client.web.********************.js 2.42 kB 0 B
dotcom-rendering/dist/9396.client.web.********************.js 691 B 0 B
dotcom-rendering/dist/9430.client.web.********************.js 510 B 0 B
dotcom-rendering/dist/9447.client.web.********************.js 3.06 kB 0 B
dotcom-rendering/dist/9604.client.web.********************.js 528 B 0 B
dotcom-rendering/dist/9789.client.web.********************.js 924 B 0 B
dotcom-rendering/dist/9826.client.web.********************.js 3.42 kB 0 B
dotcom-rendering/dist/9936.client.web.********************.js 1.84 kB 0 B
dotcom-rendering/dist/Accessibility-importable.client.web.********************.js 5.79 kB 0 B
dotcom-rendering/dist/AdBlockAsk-importable.client.web.********************.js 2.85 kB 0 B
dotcom-rendering/dist/AdPortals-importable.client.web.********************.js 3.84 kB 0 B
dotcom-rendering/dist/AlreadyVisited-importable.client.web.********************.js 425 B 0 B
dotcom-rendering/dist/AppsEpic-importable.client.web.********************.js 3.54 kB 0 B
dotcom-rendering/dist/AppsFooter-importable.client.web.********************.js 3.64 kB 0 B
dotcom-rendering/dist/AppsLightboxImage-importable.client.web.********************.js 3.03 kB 0 B
dotcom-rendering/dist/AppsLightboxImageStore-importable.client.web.********************.js 2.47 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.57 kB 0 B
dotcom-rendering/dist/Branding-importable.client.web.********************.js 3.08 kB 0 B
dotcom-rendering/dist/braze-web-sdk-core.client.web.********************.js 37.2 kB 0 B
dotcom-rendering/dist/BrazeMessaging-importable.client.web.********************.js 1.9 kB 0 B
dotcom-rendering/dist/CalloutBlockComponent-importable.client.web.********************.js 6.73 kB 0 B
dotcom-rendering/dist/CalloutEmbedBlockComponent-importable.client.web.********************.js 5.75 kB 0 B
dotcom-rendering/dist/CardCommentCount-importable.client.web.********************.js 4.91 kB 0 B
dotcom-rendering/dist/Carousel-importable.client.web.********************.js 1.17 kB 0 B
dotcom-rendering/dist/CarouselForNewsletters-importable.client.web.********************.js 6.63 kB 0 B
dotcom-rendering/dist/ChartAtom-importable.client.web.********************.js 539 B 0 B
dotcom-rendering/dist/CommentCount-importable.client.web.********************.js 3.26 kB 0 B
dotcom-rendering/dist/DiscussionApps-importable.client.web.********************.js 1.81 kB 0 B
dotcom-rendering/dist/DiscussionMeta-importable.client.web.********************.js 3.08 kB 0 B
dotcom-rendering/dist/DiscussionWeb-importable.client.web.********************.js 1.67 kB 0 B
dotcom-rendering/dist/DocumentBlockComponent-importable.client.web.********************.js 3.55 kB 0 B
dotcom-rendering/dist/EmbedBlockComponent-importable.client.web.********************.js 4.1 kB 0 B
dotcom-rendering/dist/EnhancePinnedPost-importable.client.web.********************.js 2.02 kB 0 B
dotcom-rendering/dist/FetchOnwardsData-importable.client.web.********************.js 3.4 kB 0 B
dotcom-rendering/dist/FilterKeyEventsToggle-importable.client.web.********************.js 5.21 kB 0 B
dotcom-rendering/dist/FocusStyles-importable.client.web.********************.js 622 B 0 B
dotcom-rendering/dist/FollowWrapper-importable.client.web.********************.js 837 B 0 B
dotcom-rendering/dist/FooterLabel-importable.client.web.********************.js 346 B 0 B
dotcom-rendering/dist/frameworks.client.web.********************.js 20.7 kB 0 B
dotcom-rendering/dist/GetCricketScoreboard-importable.client.web.********************.js 4.53 kB -20 B (-0.44%)
dotcom-rendering/dist/GetMatchNav-importable.client.web.********************.js 11.5 kB -15 B (-0.13%)
dotcom-rendering/dist/GetMatchStats-importable.client.web.********************.js 7.88 kB 0 B
dotcom-rendering/dist/GetMatchTabs-importable.client.web.********************.js 2.64 kB 0 B
dotcom-rendering/dist/guardian-braze-components-banner.client.web.********************.js 16.7 kB 0 B
dotcom-rendering/dist/guardian-braze-components-end-of-article.client.web.********************.js 11.2 kB 0 B
dotcom-rendering/dist/GuideAtomWrapper-importable.client.web.********************.js 3.02 kB 0 B
dotcom-rendering/dist/HeaderTopBar-importable.client.web.********************.js 7.07 kB 0 B
dotcom-rendering/dist/index.client.web.********************.js 45.8 kB +24 B (+0.05%)
dotcom-rendering/dist/InstagramBlockComponent-importable.client.web.********************.js 3.64 kB 0 B
dotcom-rendering/dist/InteractiveAtomMessenger-importable.client.web.********************.js 851 B 0 B
dotcom-rendering/dist/InteractiveBlockComponent-importable.client.web.********************.js 6.3 kB 0 B
dotcom-rendering/dist/InteractiveContentsBlockComponent-importable.client.web.********************.js 4.68 kB 0 B
dotcom-rendering/dist/InteractiveSupportButton-importable.client.web.********************.js 3.47 kB 0 B
dotcom-rendering/dist/KeyEventsCarousel-importable.client.web.********************.js 4.9 kB -15 B (-0.31%)
dotcom-rendering/dist/KnowledgeQuizAtom-importable.client.web.********************.js 3.5 kB 0 B
dotcom-rendering/dist/LatestLinks-importable.client.web.********************.js 4.85 kB -18 B (-0.37%)
dotcom-rendering/dist/LightboxHash-importable.client.web.********************.js 435 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.7 kB 0 B
dotcom-rendering/dist/Liveness-importable.client.web.********************.js 4.97 kB 0 B
dotcom-rendering/dist/ManyNewsletterSignUp-importable.client.web.********************.js 7.77 kB 0 B
dotcom-rendering/dist/MapEmbedBlockComponent-importable.client.web.********************.js 5.76 kB 0 B
dotcom-rendering/dist/Metrics-importable.client.web.********************.js 2.96 kB 0 B
dotcom-rendering/dist/MostViewedFooter-importable.client.web.********************.js 5.94 kB -16 B (-0.27%)
dotcom-rendering/dist/MostViewedFooterData-importable.client.web.********************.js 8.52 kB -19 B (-0.22%)
dotcom-rendering/dist/MostViewedRightWithAd-importable.client.web.********************.js 5.14 kB 0 B
dotcom-rendering/dist/OnwardsUpper-importable.client.web.********************.js 6.62 kB 0 B
dotcom-rendering/dist/PersonalityQuizAtom-importable.client.web.********************.js 3.63 kB 0 B
dotcom-rendering/dist/ProfileAtom-importable.client.web.********************.js 2.8 kB 0 B
dotcom-rendering/dist/ProfileAtomWrapper-importable.client.web.********************.js 3.04 kB 0 B
dotcom-rendering/dist/PulsingDot-importable.client.web.********************.js 749 B 0 B
dotcom-rendering/dist/QandaAtom-importable.client.web.********************.js 2.8 kB 0 B
dotcom-rendering/dist/ReaderRevenueDev-importable.client.web.********************.js 469 B 0 B
dotcom-rendering/dist/readerRevenueDevUtils.client.web.********************.js 1.92 kB 0 B
dotcom-rendering/dist/ReaderRevenueLinks-importable.client.web.********************.js 6.37 kB 0 B
dotcom-rendering/dist/RelativeTime-importable.client.web.********************.js 2.47 kB 0 B
dotcom-rendering/dist/RichLinkComponent-importable.client.web.********************.js 4.8 kB 0 B
dotcom-rendering/dist/SecureSignup-importable.client.web.********************.js 4.17 kB 0 B
dotcom-rendering/dist/SendAMessage-importable.client.web.********************.js 4.42 kB 0 B
dotcom-rendering/dist/SendTargetingParams-importable.client.web.********************.js 2.15 kB 0 B
dotcom-rendering/dist/sentry.client.web.********************.js 764 B 0 B
dotcom-rendering/dist/SetABTests-importable.client.web.********************.js 3.81 kB 0 B
dotcom-rendering/dist/SetAdTargeting-importable.client.web.********************.js 484 B 0 B
dotcom-rendering/dist/ShareButton-importable.client.web.********************.js 1.53 kB 0 B
dotcom-rendering/dist/shimport.client.web.********************.js 2.8 kB 0 B
dotcom-rendering/dist/ShowHideContainers-importable.client.web.********************.js 713 B 0 B
dotcom-rendering/dist/ShowMore-importable.client.web.********************.js 4.04 kB 0 B
dotcom-rendering/dist/SignInGateMain.client.web.********************.js 3.9 kB 0 B
dotcom-rendering/dist/SignInGateMainCheckoutComplete.client.web.********************.js 3.93 kB 0 B
dotcom-rendering/dist/SignInGateSelector-importable.client.web.********************.js 5.78 kB 0 B
dotcom-rendering/dist/SlotBodyEnd-importable.client.web.********************.js 4.15 kB 0 B
dotcom-rendering/dist/SpotifyBlockComponent-importable.client.web.********************.js 5.61 kB 0 B
dotcom-rendering/dist/StickyBottomBanner-importable.client.web.********************.js 6.02 kB 0 B
dotcom-rendering/dist/StickyLiveblogAskWrapper-importable.client.web.********************.js 9.31 kB 0 B
dotcom-rendering/dist/SubNav-importable.client.web.********************.js 3.37 kB 0 B
dotcom-rendering/dist/SupportTheG-importable.client.web.********************.js 6.49 kB 0 B
dotcom-rendering/dist/TableOfContents-importable.client.web.********************.js 3.2 kB 0 B
dotcom-rendering/dist/TimelineAtom-importable.client.web.********************.js 3.23 kB 0 B
dotcom-rendering/dist/TopBar-importable.client.web.********************.js 5.03 kB 0 B
dotcom-rendering/dist/TopBarSupport-importable.client.web.********************.js 2.76 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.65 kB 0 B
dotcom-rendering/dist/VideoFacebookBlockComponent-importable.client.web.********************.js 5.77 kB 0 B
dotcom-rendering/dist/VineBlockComponent-importable.client.web.********************.js 3.49 kB 0 B
dotcom-rendering/dist/WeatherWrapper-importable.client.web.********************.js 5.51 kB 0 B
dotcom-rendering/dist/YoutubeBlockComponent-importable.client.web.********************.js 3.3 kB 0 B

compressed-size-action

} else {
return JSON.parse(serialised) as Config;
config = JSON.parse(serialised) as Config;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

For the keen beans amongs you: consider using valibot to parse this?

renderingTarget: Extract<RenderingTarget, 'Web'>;
darkModeAvailable: boolean;
updateLogoAdPartnerSwitch: boolean;
assetOrigin: AssetOrigin;
}
| {
editionId: EditionId;
Copy link
Contributor

@abeddow91 abeddow91 Jul 2, 2024

Choose a reason for hiding this comment

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

We have a rule in the sand for our context use that Context should be considered global, static, and immutable - Does this violate that?

Copy link
Contributor Author

@mxdvl mxdvl Jul 2, 2024

Choose a reason for hiding this comment

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

No, it does not:

  • The immutability is now guaranteed by TS’s Readonly<T> Utility type;
  • The edition is static for a given request, you need a different request to get a different edition;
  • The edition is global, no component is allowed to have a different edition than the one used in the request.

Note that Edition was previously a candidate for using Context.

Copy link
Contributor

@abeddow91 abeddow91 left a comment

Choose a reason for hiding this comment

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

Great work!

@mxdvl mxdvl added the run_chromatic Runs chromatic when label is applied label Jul 2, 2024
@github-actions github-actions bot removed the run_chromatic Runs chromatic when label is applied label Jul 2, 2024
@mxdvl mxdvl merged commit f339ef0 into main Jul 2, 2024
34 checks passed
@mxdvl mxdvl deleted the mxdvl/config-refactor branch July 2, 2024 10:25
@prout-bot
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants