feat: Add NitroModules.box(...)
to support using Nitro Modules from any Runtime/Worklets context
#138
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.
While Nitro is runtime-agnostic and all
HybridObject
s can be used from a any Runtime, some threading/worklet libraries (like react-native-worklets-core) do not yet support copying overHybridObject
s as they use newer JSI APIs likejsi::NativeState
.While those APIs are not yet available in react-native-worklets-core, you can still use every Nitro Hybrid Object in a separate Runtime/Worklet context by just boxing it yourself:
The
BoxedHybridObject<T>
is implemented as ajsi::HostObject
, which can be used from any runtime.This is slower than just efficiently copying over the
jsi::NativeState
(plus it's prototype chain), so we'll work on implementing a truly native and automatic solution next - cc @hannojg @chrfalch.