8000 Modify all branded types such that they will match with any structurally similar type from any package version, going forward by steveluscher · Pull Request #473 · anza-xyz/kit · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Modify all branded types such that they will match with any structurally similar type from any package version, going forward #473

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

Conversation

steveluscher
Copy link
Collaborator
@steveluscher steveluscher commented May 6, 2025

Problem

Two versions of any given package may introduce two distinct instances of our branded types into a project. That is to say you might get the Address type from v2.0.0 and v2.1.0 in the same project.

Summary of Changes

Here we use the type utilities in the previous stacked PR to reimagine these types as structurally identical, rather than having an identity that's tied to one particular instance of a module.

This will make it so that Address and other branded types like it are compatible from version v2.1.1 and onward.

Fixes #459

Copy link
changeset-bot bot commented May 6, 2025

🦋 Changeset detected

Latest commit: 9270a01

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 40 packages
Name Type
@solana/rpc-subscriptions-channel-websocket Patch
@solana/webcrypto-ed25519-polyfill Patch
@solana/transaction-confirmation Patch
@solana/codecs-data-structures Patch
@solana/rpc-subscriptions-spec Patch
@solana/fast-stable-stringify Patch
@solana/rpc-subscriptions-api Patch
@solana/transaction-messages Patch
@solana/rpc-transport-http Patch
@solana/rpc-subscriptions Patch
@solana/rpc-parsed-types Patch
@solana/rpc-transformers Patch
@solana/codecs-numbers Patch
@solana/codecs-strings Patch
@solana/rpc-spec-types Patch
@solana/nominal-types Patch
@solana/instructions Patch
@solana/subscribable Patch
@solana/transactions Patch
@solana/codecs-core Patch
@solana/rpc-graphql Patch
@solana/assertions Patch
@solana/functional Patch
@solana/addresses Patch
@solana/rpc-types Patch
@solana/accounts Patch
@solana/programs Patch
@solana/promises Patch
@solana/rpc-spec Patch
@solana/options Patch
@solana/rpc-api Patch
@solana/signers Patch
@solana/sysvars Patch
@solana/codecs Patch
@solana/compat Patch
@solana/errors Patch
@solana/react Patch
@solana/keys Patch
@solana/kit Patch
@solana/rpc Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Collaborator Author
steveluscher commented May 6, 2025

Copy link
bundlemon bot commented May 6, 2025

BundleMon

Unchanged files (127)
Status Path Size Limits
@solana/kit production bundle
kit/dist/index.production.min.js
34.19KB -
rpc-graphql/dist/index.browser.mjs
18.78KB -
rpc-graphql/dist/index.native.mjs
18.78KB -
rpc-graphql/dist/index.node.mjs
18.78KB -
errors/dist/index.node.mjs
14.48KB -
errors/dist/index.browser.mjs
14.46KB -
errors/dist/index.native.mjs
14.46KB -
transaction-messages/dist/index.browser.mjs
7.24KB -
transaction-messages/dist/index.native.mjs
7.24KB -
transaction-messages/dist/index.node.mjs
7.24KB -
codecs-data-structures/dist/index.native.mjs
4.77KB -
codecs-data-structures/dist/index.browser.mjs
4.77KB -
codecs-data-structures/dist/index.node.mjs
4.77KB -
webcrypto-ed25519-polyfill/dist/index.node.mj
s
3.57KB -
webcrypto-ed25519-polyfill/dist/index.browser
.mjs
3.56KB -
webcrypto-ed25519-polyfill/dist/index.native.
mjs
3.54KB -
rpc-subscriptions/dist/index.browser.mjs
3.38KB -
rpc-subscriptions/dist/index.node.mjs
3.34KB -
rpc-subscriptions/dist/index.native.mjs
3.31KB -
codecs-core/dist/index.browser.mjs
3.3KB -
codecs-core/dist/index.native.mjs
3.3KB -
codecs-core/dist/index.node.mjs
3.3KB -
rpc-transformers/dist/index.browser.mjs
2.93KB -
rpc-transformers/dist/index.native.mjs
2.93KB -
rpc-transformers/dist/index.node.mjs
2.93KB -
addresses/dist/index.browser.mjs
2.86KB -
addresses/dist/index.native.mjs
2.86KB -
addresses/dist/index.node.mjs
2.86KB -
kit/dist/index.browser.mjs
2.71KB -
kit/dist/index.native.mjs
2.71KB -
kit/dist/index.node.mjs
2.71KB -
signers/dist/index.browser.mjs
2.63KB -
signers/dist/index.native.mjs
2.63KB -
signers/dist/index.node.mjs
2.63KB -
codecs-strings/dist/index.browser.mjs
2.53KB -
codecs-strings/dist/index.node.mjs
2.48KB -
codecs-strings/dist/index.native.mjs
2.45KB -
transaction-confirmation/dist/index.node.mjs
2.4KB -
sysvars/dist/index.browser.mjs
2.35KB -
sysvars/dist/index.native.mjs
2.34KB -
transaction-confirmation/dist/index.native.mj
s
2.34KB -
sysvars/dist/index.node.mjs
2.34KB -
transaction-confirmation/dist/index.browser.m
js
2.34KB -
rpc-subscriptions-spec/dist/index.node.mjs
2.13KB -
rpc-subscriptions-spec/dist/index.native.mjs
2.08KB -
rpc-subscriptions-spec/dist/index.browser.mjs
2.08KB -
keys/dist/index.browser.mjs
2.02KB -
keys/dist/index.native.mjs
2.02KB -
keys/dist/index.node.mjs
2.02KB -
codecs-numbers/dist/index.native.mjs
2.01KB -
codecs-numbers/dist/index.browser.mjs
2.01KB -
codecs-numbers/dist/index.node.mjs
2.01KB -
transactions/dist/index.browser.mjs
1.99KB -
react/dist/index.native.mjs
1.99KB -
transactions/dist/index.native.mjs
1.99KB -
react/dist/index.browser.mjs
1.99KB -
react/dist/index.node.mjs
1.99KB -
transactions/dist/index.node.mjs
1.99KB -
rpc/dist/index.node.mjs
1.95KB -
rpc-transport-http/dist/index.browser.mjs
1.91KB -
rpc-transport-http/dist/index.native.mjs
1.91KB -
rpc/dist/index.native.mjs
1.8KB -
subscribable/dist/index.node.mjs
1.8KB -
rpc/dist/index.browser.mjs
1.8KB -
subscribable/dist/index.native.mjs
1.75KB -
subscribable/dist/index.browser.mjs
1.74KB -
rpc-transport-http/dist/index.node.mjs
1.73KB -
rpc-types/dist/index.browser.mjs
1.6KB -
rpc-types/dist/index.native.mjs
1.6KB -
rpc-types/dist/index.node.mjs
1.6KB -
rpc-subscriptions-channel-websocket/dist/inde
x.node.mjs
1.33KB -
rpc-subscriptions-channel-websocket/dist/inde
x.native.mjs
1.27KB -
rpc-subscriptions-channel-websocket/dist/inde
x.browser.mjs
1.26KB -
options/dist/index.browser.mjs
1.18KB -
options/dist/index.native.mjs
1.18KB -
options/dist/index.node.mjs
1.17KB -
accounts/dist/index.browser.mjs
1.13KB -
accounts/dist/index.native.mjs
1.12KB -
accounts/dist/index.node.mjs
1.12KB -
compat/dist/index.browser.mjs
971B -
compat/dist/index.native.mjs
970B -
compat/dist/index.node.mjs
968B -
rpc-spec-types/dist/index.browser.mjs
964B -
rpc-api/dist/index.browser.mjs
963B -
rpc-api/dist/index.native.mjs
962B -
rpc-spec-types/dist/index.native.mjs
962B -
rpc-api/dist/index.node.mjs
961B -
rpc-spec-types/dist/index.node.mjs
961B -
rpc-subscriptions-api/dist/index.native.mjs
870B -
rpc-subscriptions-api/dist/index.node.mjs
869B -
rpc-subscriptions-api/dist/index.browser.mjs
868B -
rpc-spec/dist/index.browser.mjs
829B -
rpc-spec/dist/index.native.mjs
829B -
rpc-spec/dist/index.node.mjs
828B -
promises/dist/index.browser.mjs
799B -
promises/dist/index.native.mjs
798B -
promises/dist/index.node.mjs
797B -
assertions/dist/index.browser.mjs
783B -
instructions/dist/index.browser.mjs
769B -
instructions/dist/index.native.mjs
768B -
instructions/dist/index.node.mjs
767B -
fast-stable-stringify/dist/index.browser.mjs
726B -
fast-stable-stringify/dist/index.native.mjs
725B -
assertions/dist/index.native.mjs
724B -
fast-stable-stringify/dist/index.node.mjs
724B -
assertions/dist/index.node.mjs
723B -
programs/dist/index.browser.mjs
329B -
programs/dist/index.native.mjs
327B -
programs/dist/index.node.mjs
325B -
event-target-impl/dist/index.node.mjs
233B -
functional/dist/index.browser.mjs
154B -
functional/dist/index.native.mjs
152B -
text-encoding-impl/dist/index.native.mjs
152B -
functional/dist/index.node.mjs
151B -
codecs/dist/index.browser.mjs
137B -
codecs/dist/index.native.mjs
136B -
codecs/dist/index.node.mjs
134B -
event-target-impl/dist/index.browser.mjs
133B -
ws-impl/dist/index.node.mjs
131B -
text-encoding-impl/dist/index.browser.mjs
122B -
text-encoding-impl/dist/index.node.mjs
119B -
crypto-impl/dist/index.node.mjs
114B -
ws-impl/dist/index.browser.mjs
113B -
crypto-impl/dist/index.browser.mjs
109B -
rpc-parsed-types/dist/index.browser.mjs
66B -
rpc-parsed-types/dist/index.native.mjs
65B -
rpc-parsed-types/dist/index.node.mjs
63B -

No change in files bundle size

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from 57d3857 to d9419ea Compare May 6, 2025 23:17
@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from d9419ea to 92ca667 Compare May 6, 2025 23:20
Copy link
Contributor
github-actions bot commented May 6, 2025

Documentation Preview: https://kit-docs-9inxs4t3b-anza-tech.vercel.app

Copy link
Member
@lorisleiva lorisleiva left a comment

Choose a reason for hiding this comment

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

Beautiful! There are other unique symbols we should consider cleaning such as transaction type flags (e.g. FullySignedTransaction). Refer to my previous comment for this.

@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from 92ca667 to 2f4b511 Compare May 7, 2025 15:04
@steveluscher steveluscher force-pushed the 05-06-a_package_for_creating_nominal-types branch from 9376ffa to 509f7f6 Compare May 7, 2025 15:04
Copy link
@jordaaash jordaaash left a comment

Choose a reason for hiding this comment

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

❤️

Copy link
Collaborator Author
@steveluscher steveluscher left a comment

Choose a reason for hiding this comment

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

I'm dumb. This isn't a major version bump. Opaque/branded types between patch versions of v2 are already incompatible, so improving this is not a breaking change.

@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from 2f4b511 to dfb0faf Compare May 7, 2025 21:08
@steveluscher steveluscher force-pushed the 05-06-a_package_for_creating_nominal-types branch from 509f7f6 to 45bed58 Compare May 7, 2025 21:08
@steveluscher steveluscher requested a review from lorisleiva May 7, 2025 21:09
@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from dfb0faf to 1dc5153 Compare May 7, 2025 21:23
@steveluscher steveluscher force-pushed the 05-06-a_package_for_creating_nominal-types branch from 45bed58 to 79fde4c Compare May 7, 2025 21:23
@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from 1dc5153 to 7ec918b Compare May 8, 2025 17:22
@steveluscher steveluscher force-pushed the 05-06-a_package_for_creating_nominal-types branch from 79fde4c to 3a7178b Compare May 8, 2025 17:22
@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from 7ec918b to 12e89b4 Compare May 8, 2025 17:22
@steveluscher steveluscher force-pushed the 05-06-a_package_for_creating_nominal-types branch from 3a7178b to 064e825 Compare May 8, 2025 17:22
@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from 12e89b4 to 445cc6c Compare May 8, 2025 17:23
@steveluscher steveluscher force-pushed the 05-06-a_package_for_creating_nominal-types branch from 064e825 to f0cceaf Compare May 8, 2025 17:23
Copy link
Collaborator Author
steveluscher commented May 8, 2025

Merge activity

  • May 8, 10:25 AM PDT: A user started a stack merge that includes this pull request via Graphite.
  • May 8, 10:28 AM PDT: Graphite rebased this pull request as part of a merge.
  • May 8, 10:30 AM PDT: @steveluscher merged this pull request with Graphite.

@steveluscher steveluscher changed the base branch from 05-06-a_package_for_creating_nominal-types to graphite-base/473 May 8, 2025 17:26
@steveluscher steveluscher changed the base branch from graphite-base/473 to main May 8, 2025 17:27
…lly similar type from any package version, going forward
@steveluscher steveluscher force-pushed the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch from 445cc6c to 9270a01 Compare May 8, 2025 17:27
@steveluscher steveluscher merged commit 36a9dee into main May 8, 2025
13 checks passed
@steveluscher steveluscher deleted the 05-06-the_address_type_will_now_match_with_any_structurally_similar_type_from_any_package_version branch May 8, 2025 17:30
Copy link
Contributor

Because there has been no activity on this PR for 14 days since it was merged, it has been automatically locked. Please open a new issue if it requires a follow up.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 23, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Maybe the opaque types are too opaque
3 participants
0