feat: enable dynamic import of wallet libraries #100
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Prior to this change, each wallet library had to be imported statically, which greatly impacted the final build of a frontend due to the large size of these libraries.
With these changes, the possibility of dynamically importing these libraries is added in a backward compatible manner, and the developer can choose whether or not to opt for.
Specifically, the
getDynamicClient
parameter has been introduced. Users can incorporate this parameter into a provider's configuration. This parameter should be a function that returns a promise, which upon resolution, provides the corresponding wallet's client.Currently, I haven't added any new unit tests since these would likely mock the implementation and thus, offer minimal benefit. Furthermore, considering the nature of the modification, the TypeScript static type verification inherent should suffice (even before this change, I do not think there was any testing of
init
methods).To show the benefits of these changes, here is how much the frontend in nextjs that I used for testing was reduced in size:
At present, the code executes the initialization of all providers internally via
useInitializeProviders
. However, to enhance library loading efficiency in the future, it would be advantageous to triggerinit
methods:connect
is called on the specific client),Checklist