mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Setting bridge up for sharing: allowing native modules to register after init
Reviewed By: javache Differential Revision: D4945784 fbshipit-source-id: 80e7236e9ccd5d5c9a7fba7c96b98fc38b43a2fc
This commit is contained in:
committed by
Facebook Github Bot
parent
1ae54b5108
commit
5c5410459e
@@ -30,15 +30,36 @@ std::string normalizeName(std::string name) {
|
||||
ModuleRegistry::ModuleRegistry(std::vector<std::unique_ptr<NativeModule>> modules)
|
||||
: modules_(std::move(modules)) {}
|
||||
|
||||
void ModuleRegistry::registerModules(std::vector<std::unique_ptr<NativeModule>> modules) {
|
||||
// TODO: consider relaxing this restriction
|
||||
CHECK(modulesByName_.empty()) << "Can only register additional modules before NativeModules have been accessed";
|
||||
void ModuleRegistry::updateModuleNamesFromIndex(size_t index) {
|
||||
for (; index < modules_.size(); index++ ) {
|
||||
std::string name = normalizeName(modules_[index]->getName());
|
||||
modulesByName_[name] = index;
|
||||
}
|
||||
}
|
||||
|
||||
if (modules_.empty()) {
|
||||
void ModuleRegistry::registerModules(std::vector<std::unique_ptr<NativeModule>> modules) {
|
||||
if (modules_.empty() && unknownModules_.empty()) {
|
||||
modules_ = std::move(modules);
|
||||
} else {
|
||||
modules_.reserve(modules_.size() + modules.size());
|
||||
size_t modulesSize = modules_.size();
|
||||
size_t addModulesSize = modules.size();
|
||||
bool addToNames = !modulesByName_.empty();
|
||||
modules_.reserve(modulesSize + addModulesSize);
|
||||
std::move(modules.begin(), modules.end(), std::back_inserter(modules_));
|
||||
if (!unknownModules_.empty()) {
|
||||
for (size_t index = modulesSize; index < modulesSize + addModulesSize; index++) {
|
||||
std::string name = normalizeName(modules_[index]->getName());
|
||||
auto it = unknownModules_.find(name);
|
||||
if (it != unknownModules_.end()) {
|
||||
throw std::runtime_error(
|
||||
folly::to<std::string>("module ", name, " was required without being registered and is now being registered."));
|
||||
} else if (addToNames) {
|
||||
modulesByName_[name] = index;
|
||||
}
|
||||
}
|
||||
} else if (addToNames) {
|
||||
updateModuleNamesFromIndex(modulesSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +83,7 @@ folly::Optional<ModuleConfig> ModuleRegistry::getConfig(const std::string& name)
|
||||
|
||||
auto it = modulesByName_.find(name);
|
||||
if (it == modulesByName_.end()) {
|
||||
unknownModules_.insert(name);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user