Repository navigation
Expand file tree
/
Copy pathDefaultTurboModuleManagerDelegate.cpp
More file actions
92 lines (77 loc) · 2.71 KB
/
Copy pathDefaultTurboModuleManagerDelegate.cpp
File metadata and controls
92 lines (77 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "DefaultTurboModuleManagerDelegate.h"
#include <algorithm>
#include <react/nativemodule/defaults/DefaultTurboModules.h>
namespace facebook::react {
DefaultTurboModuleManagerDelegate::DefaultTurboModuleManagerDelegate(
jni::alias_ref<jni::JList<CxxReactPackage::javaobject>::javaobject>
cxxReactPackages)
: cxxReactPackages_() {
cxxReactPackages_.reserve(cxxReactPackages->size());
std::transform(
cxxReactPackages->begin(),
cxxReactPackages->end(),
std::back_inserter(cxxReactPackages_),
[](jni::alias_ref<CxxReactPackage::javaobject> elem) {
return jni::make_global(elem);
});
};
std::function<std::shared_ptr<TurboModule>(
const std::string&,
const std::shared_ptr<CallInvoker>&)>
DefaultTurboModuleManagerDelegate::cxxModuleProvider{nullptr};
std::function<std::shared_ptr<TurboModule>(
const std::string&,
const JavaTurboModule::InitParams&)>
DefaultTurboModuleManagerDelegate::javaModuleProvider{nullptr};
jni::local_ref<DefaultTurboModuleManagerDelegate::jhybriddata>
DefaultTurboModuleManagerDelegate::initHybrid(
jni::alias_ref<jclass> /*jClass*/,
jni::alias_ref<jni::JList<CxxReactPackage::javaobject>::javaobject>
cxxReactPackages) {
return makeCxxInstance(cxxReactPackages);
}
void DefaultTurboModuleManagerDelegate::registerNatives() {
registerHybrid({
makeNativeMethod(
"initHybrid", DefaultTurboModuleManagerDelegate::initHybrid),
});
}
std::shared_ptr<TurboModule> DefaultTurboModuleManagerDelegate::getTurboModule(
const std::string& name,
const std::shared_ptr<CallInvoker>& jsInvoker) {
for (const auto& cxxReactPackage : cxxReactPackages_) {
auto cppPart = cxxReactPackage->cthis();
if (cppPart != nullptr) {
auto module = cppPart->getModule(name, jsInvoker);
if (module) {
return module;
}
}
}
auto moduleProvider = DefaultTurboModuleManagerDelegate::cxxModuleProvider;
if (moduleProvider) {
auto module = moduleProvider(name, jsInvoker);
if (module) {
return module;
}
}
return DefaultTurboModules::getTurboModule(name, jsInvoker);
}
std::shared_ptr<TurboModule> DefaultTurboModuleManagerDelegate::getTurboModule(
const std::string& name,
const JavaTurboModule::InitParams& params) {
auto moduleProvider = DefaultTurboModuleManagerDelegate::javaModuleProvider;
if (moduleProvider) {
if (auto resolvedModule = moduleProvider(name, params)) {
return resolvedModule;
}
}
return nullptr;
}
} // namespace facebook::react