Files
react-native/ReactCommon/cxxreact/JSDeltaBundleClient.cpp
T
Jason Safaiyeh dc6c57ce0d Resolve React-cxxreact warnings (#28047)
Summary:
Resolve Xcode warnings from React-cxxreact.

## Changelog

[iOS] [Fixed] - Resolve Xcode warnings from React-cxxreact.
Pull Request resolved: https://github.com/facebook/react-native/pull/28047

Test Plan: React-cxxreact should no longer throw `... creates a copy from type...` warnings

Differential Revision: D19874043

Pulled By: hramos

fbshipit-source-id: 15a4a810adee268e6ede459d6d4917ccfa83c157
2020-02-12 23:49:15 -08:00

101 lines
2.5 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "JSDeltaBundleClient.h"
#include <memory>
#include <sstream>
namespace facebook {
namespace react {
namespace {
std::string startupCode(const folly::dynamic *pre, const folly::dynamic *post) {
std::ostringstream startupCode;
for (auto section : {pre, post}) {
if (section != nullptr) {
startupCode << section->getString() << '\n';
}
}
return startupCode.str();
}
} // namespace
void JSDeltaBundleClient::patchModules(const folly::dynamic *modules) {
for (const folly::dynamic &pair : *modules) {
auto id = pair[0].getInt();
auto module = pair[1];
modules_[id] = std::move(module.getString());
}
}
void JSDeltaBundleClient::patch(const folly::dynamic &delta) {
auto const base = delta.get_ptr("base");
if (base != nullptr && base->asBool()) {
clear();
auto const pre = delta.get_ptr("pre");
auto const post = delta.get_ptr("post");
startupCode_ = startupCode(pre, post);
const folly::dynamic *modules = delta.get_ptr("modules");
if (modules != nullptr) {
patchModules(modules);
}
} else {
const folly::dynamic *deleted = delta.get_ptr("deleted");
if (deleted != nullptr) {
for (const folly::dynamic &id : *deleted) {
modules_.erase(id.getInt());
}
}
// TODO T37123645 This is deprecated but necessary in order to support older
// versions of the Metro server.
const folly::dynamic *modules = delta.get_ptr("modules");
if (modules != nullptr) {
patchModules(modules);
}
const folly::dynamic *added = delta.get_ptr("added");
if (added != nullptr) {
patchModules(added);
}
const folly::dynamic *modified = delta.get_ptr("modified");
if (modified != nullptr) {
patchModules(modified);
}
}
}
JSModulesUnbundle::Module JSDeltaBundleClient::getModule(
uint32_t moduleId) const {
auto search = modules_.find(moduleId);
if (search != modules_.end()) {
return {folly::to<std::string>(search->first, ".js"), search->second};
}
throw JSModulesUnbundle::ModuleNotFound(moduleId);
}
std::unique_ptr<const JSBigString> JSDeltaBundleClient::getStartupCode() const {
return std::make_unique<JSBigStdString>(startupCode_);
}
void JSDeltaBundleClient::clear() {
modules_.clear();
startupCode_.clear();
}
} // namespace react
} // namespace facebook