Skip to content

Commit

Permalink
Allow "nativeRequire" to accept "bundleId" and "moduleId" values
Browse files Browse the repository at this point in the history
Differential Revision: D5850960

fbshipit-source-id: 4d7aa0ed7542181861649a2089d90c3cf98723e9
  • Loading branch information
fromcelticpark authored and facebook-github-bot committed Sep 21, 2017
1 parent b9be9a0 commit da2ea26
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 10 deletions.
11 changes: 1 addition & 10 deletions ReactCommon/cxxreact/JSCExecutor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -574,16 +574,7 @@ JSValueRef JSCExecutor::getNativeModule(JSObjectRef object, JSStringRef property
JSValueRef JSCExecutor::nativeRequire(
size_t argumentCount,
const JSValueRef arguments[]) {
if (argumentCount != 1) {
throw std::invalid_argument("Got wrong number of args");
}

double moduleId = Value(m_context, arguments[0]).asNumber();
if (moduleId < 0) {
throw std::invalid_argument(folly::to<std::string>("Received invalid module ID: ",
Value(m_context, arguments[0]).toString().str()));
}

uint32_t moduleId = parseNativeRequireParameters(m_context, arguments, argumentCount).second;
ReactMarker::logMarker(ReactMarker::NATIVE_REQUIRE_START);
loadModule(moduleId);
ReactMarker::logMarker(ReactMarker::NATIVE_REQUIRE_STOP);
Expand Down
28 changes: 28 additions & 0 deletions ReactCommon/cxxreact/JSCUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,33 @@ String jsStringFromBigString(JSContextRef ctx, const JSBigString& bigstr) {
}
}

std::pair<uint32_t, uint32_t> parseNativeRequireParameters(
const JSGlobalContextRef& context,
const JSValueRef arguments[],
size_t argumentCount) {
double moduleId = 0, bundleId = 0;

if (argumentCount == 1) {
moduleId = Value(context, arguments[0]).asNumber();
} else if (argumentCount == 2) {
moduleId = Value(context, arguments[0]).asNumber();
bundleId = Value(context, arguments[1]).asNumber();
} else {
throw std::invalid_argument("Got wrong number of args");
}

if (moduleId < 0) {
throw std::invalid_argument(folly::to<std::string>("Received invalid module ID: ",
Value(context, arguments[0]).toString().str()));
}

if (bundleId < 0) {
throw std::invalid_argument(folly::to<std::string>("Received invalid bundle ID: ",
Value(context, arguments[1]).toString().str()));
}

return std::make_pair(static_cast<uint32_t>(bundleId), static_cast<uint32_t>(moduleId));
}

}
}
8 changes: 8 additions & 0 deletions ReactCommon/cxxreact/JSCUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,13 @@ namespace react {

String jsStringFromBigString(JSContextRef ctx, const JSBigString& bigstr);

/**
* Parses "nativeRequire" parameters
* and returns pair of "bundle id" & "module id" values
*/
std::pair<uint32_t, uint32_t> parseNativeRequireParameters(const JSGlobalContextRef& context,
const JSValueRef arguments[],
size_t argumentCount);

}
}

0 comments on commit da2ea26

Please sign in to comment.