From dd5474f1e96e1c1e2f00ba3655ef86590d39b0fd Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Wed, 17 Jan 2024 08:53:58 -0800 Subject: [PATCH] Add util function to determine TurboModuleValueKind (#42271) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/42271 Changelog: [Internal] Adds a util function to determine the `TurboModuleMethodValueKind` based on the `jsi:Value` type Reviewed By: javache Differential Revision: D52761045 fbshipit-source-id: de937cda67198aad962e63f41ccd42be6c00c0b8 --- .../core/ReactCommon/TurboModule.cpp | 25 +++++++++++++++++++ .../core/ReactCommon/TurboModule.h | 7 ++++++ 2 files changed, 32 insertions(+) diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.cpp b/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.cpp index f3641afcb52..b0924be26e1 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.cpp @@ -6,9 +6,34 @@ */ #include "TurboModule.h" +#include namespace facebook::react { +TurboModuleMethodValueKind getTurboModuleMethodValueKind( + jsi::Runtime& rt, + const jsi::Value* value) { + if (!value || value->isUndefined() || value->isNull()) { + return VoidKind; + } else if (value->isBool()) { + return BooleanKind; + } else if (value->isNumber()) { + return NumberKind; + } else if (value->isString()) { + return StringKind; + } else if (value->isObject()) { + auto object = value->asObject(rt); + if (object.isArray(rt)) { + return ArrayKind; + } else if (object.isFunction(rt)) { + return FunctionKind; + } + return ObjectKind; + } + react_native_assert(false && "Unsupported jsi::Value kind"); + return VoidKind; +} + TurboModule::TurboModule( std::string name, std::shared_ptr jsInvoker) diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h b/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h index 4ecfe86f143..ccd9d1f8596 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h +++ b/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h @@ -31,6 +31,13 @@ enum TurboModuleMethodValueKind { PromiseKind, }; +/** + * Determines TurboModuleMethodValueKind based on the jsi::Value type. + */ +TurboModuleMethodValueKind getTurboModuleMethodValueKind( + jsi::Runtime& rt, + const jsi::Value* value); + class TurboCxxModule; class TurboModuleBinding;