mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Don't support float enums
Summary: Changelog: [General][BREAKING] Don't support 'float' enums in Turbo Modules - The current implementation of 'float enums' in C++ does not work as invalid results are returned. - At potential fix could still cause rounding errors when crossing language bounaries, e.g. `4.6` can become `4.5599999942..` - C++ enum classes don't support float: https://eel.is/c++draft/dcl.enum#2.sentence-4 > The type-specifier-seq of an enum-base shall name an integral type; any cv-qualification is ignored. Hence removing the feature of `float enums` for now Reviewed By: NickGerleman Differential Revision: D52120405 fbshipit-source-id: 3685ad0629e16ff9db424ba67e07d09df6027553
This commit is contained in:
committed by
Facebook GitHub Bot
parent
12aef32b82
commit
536edf3726
-9
@@ -34,30 +34,21 @@ export enum StatusNumEnum {
|
||||
Off = 0,
|
||||
}
|
||||
|
||||
export enum StatusFractionEnum {
|
||||
Active = 0.2,
|
||||
Paused = 0.1,
|
||||
Off = 0.0,
|
||||
}
|
||||
|
||||
export type StateTypeWithEnums = {|
|
||||
state: string,
|
||||
regular: StatusRegularEnum,
|
||||
str: StatusStrEnum,
|
||||
num: StatusNumEnum,
|
||||
fraction: StatusFractionEnum,
|
||||
|};
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
+getStatusRegular: (statusProp: StateType) => StatusRegularEnum;
|
||||
+getStatusStr: (statusProp: StateType) => StatusStrEnum;
|
||||
+getStatusNum: (statusProp: StateType) => StatusNumEnum;
|
||||
+getStatusFraction: (statusProp: StateType) => StatusFractionEnum;
|
||||
+getStateType: (
|
||||
a: StatusRegularEnum,
|
||||
b: StatusStrEnum,
|
||||
c: StatusNumEnum,
|
||||
d: StatusFractionEnum,
|
||||
) => StateType;
|
||||
+getStateTypeWithEnums: (
|
||||
paramOfTypeWithEnums: StateTypeWithEnums,
|
||||
|
||||
+4
-20
@@ -96,19 +96,12 @@ static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusNum(js
|
||||
count <= 0 ? throw jsi::JSError(rt, \\"Expected argument in position 0 to be passed\\") : args[0].asObject(rt)
|
||||
);
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusFraction(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
return static_cast<NativeEnumTurboModuleCxxSpecJSI *>(&turboModule)->getStatusFraction(
|
||||
rt,
|
||||
count <= 0 ? throw jsi::JSError(rt, \\"Expected argument in position 0 to be passed\\") : args[0].asObject(rt)
|
||||
);
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateType(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
return static_cast<NativeEnumTurboModuleCxxSpecJSI *>(&turboModule)->getStateType(
|
||||
rt,
|
||||
count <= 0 ? throw jsi::JSError(rt, \\"Expected argument in position 0 to be passed\\") : args[0].asString(rt),
|
||||
count <= 1 ? throw jsi::JSError(rt, \\"Expected argument in position 1 to be passed\\") : args[1].asString(rt),
|
||||
count <= 2 ? throw jsi::JSError(rt, \\"Expected argument in position 2 to be passed\\") : args[2].asNumber(),
|
||||
count <= 3 ? throw jsi::JSError(rt, \\"Expected argument in position 3 to be passed\\") : args[3].asNumber()
|
||||
count <= 2 ? throw jsi::JSError(rt, \\"Expected argument in position 2 to be passed\\") : args[2].asNumber()
|
||||
);
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateTypeWithEnums(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
@@ -123,8 +116,7 @@ NativeEnumTurboModuleCxxSpecJSI::NativeEnumTurboModuleCxxSpecJSI(std::shared_ptr
|
||||
methodMap_[\\"getStatusRegular\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusRegular};
|
||||
methodMap_[\\"getStatusStr\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusStr};
|
||||
methodMap_[\\"getStatusNum\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusNum};
|
||||
methodMap_[\\"getStatusFraction\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusFraction};
|
||||
methodMap_[\\"getStateType\\"] = MethodMetadata {4, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateType};
|
||||
methodMap_[\\"getStateType\\"] = MethodMetadata {3, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateType};
|
||||
methodMap_[\\"getStateTypeWithEnums\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateTypeWithEnums};
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeNullableTurboModuleCxxSpecJSI_getBool(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
@@ -917,19 +909,12 @@ static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusNum(js
|
||||
count <= 0 ? throw jsi::JSError(rt, \\"Expected argument in position 0 to be passed\\") : args[0].asObject(rt)
|
||||
);
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusFraction(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
return static_cast<NativeEnumTurboModuleCxxSpecJSI *>(&turboModule)->getStatusFraction(
|
||||
rt,
|
||||
count <= 0 ? throw jsi::JSError(rt, \\"Expected argument in position 0 to be passed\\") : args[0].asObject(rt)
|
||||
);
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateType(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
return static_cast<NativeEnumTurboModuleCxxSpecJSI *>(&turboModule)->getStateType(
|
||||
rt,
|
||||
count <= 0 ? throw jsi::JSError(rt, \\"Expected argument in position 0 to be passed\\") : args[0].asString(rt),
|
||||
count <= 1 ? throw jsi::JSError(rt, \\"Expected argument in position 1 to be passed\\") : args[1].asString(rt),
|
||||
count <= 2 ? throw jsi::JSError(rt, \\"Expected argument in position 2 to be passed\\") : args[2].asNumber(),
|
||||
count <= 3 ? throw jsi::JSError(rt, \\"Expected argument in position 3 to be passed\\") : args[3].asNumber()
|
||||
count <= 2 ? throw jsi::JSError(rt, \\"Expected argument in position 2 to be passed\\") : args[2].asNumber()
|
||||
);
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateTypeWithEnums(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
@@ -944,8 +929,7 @@ NativeEnumTurboModuleCxxSpecJSI::NativeEnumTurboModuleCxxSpecJSI(std::shared_ptr
|
||||
methodMap_[\\"getStatusRegular\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusRegular};
|
||||
methodMap_[\\"getStatusStr\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusStr};
|
||||
methodMap_[\\"getStatusNum\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusNum};
|
||||
methodMap_[\\"getStatusFraction\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStatusFraction};
|
||||
methodMap_[\\"getStateType\\"] = MethodMetadata {4, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateType};
|
||||
methodMap_[\\"getStateType\\"] = MethodMetadata {3, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateType};
|
||||
methodMap_[\\"getStateTypeWithEnums\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleCxxSpecJSI_getStateTypeWithEnums};
|
||||
}
|
||||
static jsi::Value __hostFunction_NativeNullableTurboModuleCxxSpecJSI_getBool(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
||||
|
||||
+16
-112
@@ -287,38 +287,6 @@ struct Bridging<NativeEnumTurboModuleStatusNumEnum> {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#pragma mark - NativeEnumTurboModuleStatusFractionEnum
|
||||
|
||||
enum class NativeEnumTurboModuleStatusFractionEnum { Active, Paused, Off };
|
||||
|
||||
template <>
|
||||
struct Bridging<NativeEnumTurboModuleStatusFractionEnum> {
|
||||
static NativeEnumTurboModuleStatusFractionEnum fromJs(jsi::Runtime &rt, const jsi::Value &rawValue) {
|
||||
double value = (double)rawValue.asNumber();
|
||||
if (value == 0.2f) {
|
||||
return NativeEnumTurboModuleStatusFractionEnum::Active;
|
||||
} else if (value == 0.1f) {
|
||||
return NativeEnumTurboModuleStatusFractionEnum::Paused;
|
||||
} else if (value == 0f) {
|
||||
return NativeEnumTurboModuleStatusFractionEnum::Off;
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for value\\");
|
||||
}
|
||||
}
|
||||
|
||||
static jsi::Value toJs(jsi::Runtime &rt, NativeEnumTurboModuleStatusFractionEnum value) {
|
||||
if (value == NativeEnumTurboModuleStatusFractionEnum::Active) {
|
||||
return bridging::toJs(rt, 0.2f);
|
||||
} else if (value == NativeEnumTurboModuleStatusFractionEnum::Paused) {
|
||||
return bridging::toJs(rt, 0.1f);
|
||||
} else if (value == NativeEnumTurboModuleStatusFractionEnum::Off) {
|
||||
return bridging::toJs(rt, 0f);
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for enum value\\");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#pragma mark - NativeEnumTurboModuleStateType
|
||||
|
||||
@@ -363,15 +331,14 @@ struct NativeEnumTurboModuleStateTypeBridging {
|
||||
|
||||
#pragma mark - NativeEnumTurboModuleStateTypeWithEnums
|
||||
|
||||
template <typename P0, typename P1, typename P2, typename P3, typename P4>
|
||||
template <typename P0, typename P1, typename P2, typename P3>
|
||||
struct NativeEnumTurboModuleStateTypeWithEnums {
|
||||
P0 state;
|
||||
P1 regular;
|
||||
P2 str;
|
||||
P3 num;
|
||||
P4 fraction;
|
||||
bool operator==(const NativeEnumTurboModuleStateTypeWithEnums &other) const {
|
||||
return state == other.state && regular == other.regular && str == other.str && num == other.num && fraction == other.fraction;
|
||||
return state == other.state && regular == other.regular && str == other.str && num == other.num;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -387,8 +354,7 @@ struct NativeEnumTurboModuleStateTypeWithEnumsBridging {
|
||||
bridging::fromJs<decltype(types.state)>(rt, value.getProperty(rt, \\"state\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.regular)>(rt, value.getProperty(rt, \\"regular\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.str)>(rt, value.getProperty(rt, \\"str\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.num)>(rt, value.getProperty(rt, \\"num\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.fraction)>(rt, value.getProperty(rt, \\"fraction\\"), jsInvoker)};
|
||||
bridging::fromJs<decltype(types.num)>(rt, value.getProperty(rt, \\"num\\"), jsInvoker)};
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -408,10 +374,6 @@ struct NativeEnumTurboModuleStateTypeWithEnumsBridging {
|
||||
static jsi::Value numToJs(jsi::Runtime &rt, decltype(types.num) value) {
|
||||
return bridging::toJs(rt, value);
|
||||
}
|
||||
|
||||
static jsi::Value fractionToJs(jsi::Runtime &rt, decltype(types.fraction) value) {
|
||||
return bridging::toJs(rt, value);
|
||||
}
|
||||
#endif
|
||||
|
||||
static jsi::Object toJs(
|
||||
@@ -423,7 +385,6 @@ struct NativeEnumTurboModuleStateTypeWithEnumsBridging {
|
||||
result.setProperty(rt, \\"regular\\", bridging::toJs(rt, value.regular, jsInvoker));
|
||||
result.setProperty(rt, \\"str\\", bridging::toJs(rt, value.str, jsInvoker));
|
||||
result.setProperty(rt, \\"num\\", bridging::toJs(rt, value.num, jsInvoker));
|
||||
result.setProperty(rt, \\"fraction\\", bridging::toJs(rt, value.fraction, jsInvoker));
|
||||
return result;
|
||||
}
|
||||
};
|
||||
@@ -436,8 +397,7 @@ public:
|
||||
virtual jsi::String getStatusRegular(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::String getStatusStr(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::Value getStatusNum(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::Value getStatusFraction(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c, jsi::Value d) = 0;
|
||||
virtual jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c) = 0;
|
||||
virtual jsi::Object getStateTypeWithEnums(jsi::Runtime &rt, jsi::Object paramOfTypeWithEnums) = 0;
|
||||
|
||||
};
|
||||
@@ -486,21 +446,13 @@ private:
|
||||
return bridging::callFromJs<jsi::Value>(
|
||||
rt, &T::getStatusNum, jsInvoker_, instance_, std::move(statusProp));
|
||||
}
|
||||
jsi::Value getStatusFraction(jsi::Runtime &rt, jsi::Object statusProp) override {
|
||||
jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c) override {
|
||||
static_assert(
|
||||
bridging::getParameterCount(&T::getStatusFraction) == 2,
|
||||
\\"Expected getStatusFraction(...) to have 2 parameters\\");
|
||||
|
||||
return bridging::callFromJs<jsi::Value>(
|
||||
rt, &T::getStatusFraction, jsInvoker_, instance_, std::move(statusProp));
|
||||
}
|
||||
jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c, jsi::Value d) override {
|
||||
static_assert(
|
||||
bridging::getParameterCount(&T::getStateType) == 5,
|
||||
\\"Expected getStateType(...) to have 5 parameters\\");
|
||||
bridging::getParameterCount(&T::getStateType) == 4,
|
||||
\\"Expected getStateType(...) to have 4 parameters\\");
|
||||
|
||||
return bridging::callFromJs<jsi::Object>(
|
||||
rt, &T::getStateType, jsInvoker_, instance_, std::move(a), std::move(b), std::move(c), std::move(d));
|
||||
rt, &T::getStateType, jsInvoker_, instance_, std::move(a), std::move(b), std::move(c));
|
||||
}
|
||||
jsi::Object getStateTypeWithEnums(jsi::Runtime &rt, jsi::Object paramOfTypeWithEnums) override {
|
||||
static_assert(
|
||||
@@ -2289,38 +2241,6 @@ struct Bridging<NativeEnumTurboModuleStatusNumEnum> {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#pragma mark - NativeEnumTurboModuleStatusFractionEnum
|
||||
|
||||
enum class NativeEnumTurboModuleStatusFractionEnum { Active, Paused, Off };
|
||||
|
||||
template <>
|
||||
struct Bridging<NativeEnumTurboModuleStatusFractionEnum> {
|
||||
static NativeEnumTurboModuleStatusFractionEnum fromJs(jsi::Runtime &rt, const jsi::Value &rawValue) {
|
||||
double value = (double)rawValue.asNumber();
|
||||
if (value == 0.2f) {
|
||||
return NativeEnumTurboModuleStatusFractionEnum::Active;
|
||||
} else if (value == 0.1f) {
|
||||
return NativeEnumTurboModuleStatusFractionEnum::Paused;
|
||||
} else if (value == 0f) {
|
||||
return NativeEnumTurboModuleStatusFractionEnum::Off;
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for value\\");
|
||||
}
|
||||
}
|
||||
|
||||
static jsi::Value toJs(jsi::Runtime &rt, NativeEnumTurboModuleStatusFractionEnum value) {
|
||||
if (value == NativeEnumTurboModuleStatusFractionEnum::Active) {
|
||||
return bridging::toJs(rt, 0.2f);
|
||||
} else if (value == NativeEnumTurboModuleStatusFractionEnum::Paused) {
|
||||
return bridging::toJs(rt, 0.1f);
|
||||
} else if (value == NativeEnumTurboModuleStatusFractionEnum::Off) {
|
||||
return bridging::toJs(rt, 0f);
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for enum value\\");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#pragma mark - NativeEnumTurboModuleStateType
|
||||
|
||||
@@ -2365,15 +2285,14 @@ struct NativeEnumTurboModuleStateTypeBridging {
|
||||
|
||||
#pragma mark - NativeEnumTurboModuleStateTypeWithEnums
|
||||
|
||||
template <typename P0, typename P1, typename P2, typename P3, typename P4>
|
||||
template <typename P0, typename P1, typename P2, typename P3>
|
||||
struct NativeEnumTurboModuleStateTypeWithEnums {
|
||||
P0 state;
|
||||
P1 regular;
|
||||
P2 str;
|
||||
P3 num;
|
||||
P4 fraction;
|
||||
bool operator==(const NativeEnumTurboModuleStateTypeWithEnums &other) const {
|
||||
return state == other.state && regular == other.regular && str == other.str && num == other.num && fraction == other.fraction;
|
||||
return state == other.state && regular == other.regular && str == other.str && num == other.num;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2389,8 +2308,7 @@ struct NativeEnumTurboModuleStateTypeWithEnumsBridging {
|
||||
bridging::fromJs<decltype(types.state)>(rt, value.getProperty(rt, \\"state\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.regular)>(rt, value.getProperty(rt, \\"regular\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.str)>(rt, value.getProperty(rt, \\"str\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.num)>(rt, value.getProperty(rt, \\"num\\"), jsInvoker),
|
||||
bridging::fromJs<decltype(types.fraction)>(rt, value.getProperty(rt, \\"fraction\\"), jsInvoker)};
|
||||
bridging::fromJs<decltype(types.num)>(rt, value.getProperty(rt, \\"num\\"), jsInvoker)};
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2410,10 +2328,6 @@ struct NativeEnumTurboModuleStateTypeWithEnumsBridging {
|
||||
static jsi::Value numToJs(jsi::Runtime &rt, decltype(types.num) value) {
|
||||
return bridging::toJs(rt, value);
|
||||
}
|
||||
|
||||
static jsi::Value fractionToJs(jsi::Runtime &rt, decltype(types.fraction) value) {
|
||||
return bridging::toJs(rt, value);
|
||||
}
|
||||
#endif
|
||||
|
||||
static jsi::Object toJs(
|
||||
@@ -2425,7 +2339,6 @@ struct NativeEnumTurboModuleStateTypeWithEnumsBridging {
|
||||
result.setProperty(rt, \\"regular\\", bridging::toJs(rt, value.regular, jsInvoker));
|
||||
result.setProperty(rt, \\"str\\", bridging::toJs(rt, value.str, jsInvoker));
|
||||
result.setProperty(rt, \\"num\\", bridging::toJs(rt, value.num, jsInvoker));
|
||||
result.setProperty(rt, \\"fraction\\", bridging::toJs(rt, value.fraction, jsInvoker));
|
||||
return result;
|
||||
}
|
||||
};
|
||||
@@ -2438,8 +2351,7 @@ public:
|
||||
virtual jsi::String getStatusRegular(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::String getStatusStr(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::Value getStatusNum(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::Value getStatusFraction(jsi::Runtime &rt, jsi::Object statusProp) = 0;
|
||||
virtual jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c, jsi::Value d) = 0;
|
||||
virtual jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c) = 0;
|
||||
virtual jsi::Object getStateTypeWithEnums(jsi::Runtime &rt, jsi::Object paramOfTypeWithEnums) = 0;
|
||||
|
||||
};
|
||||
@@ -2488,21 +2400,13 @@ private:
|
||||
return bridging::callFromJs<jsi::Value>(
|
||||
rt, &T::getStatusNum, jsInvoker_, instance_, std::move(statusProp));
|
||||
}
|
||||
jsi::Value getStatusFraction(jsi::Runtime &rt, jsi::Object statusProp) override {
|
||||
jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c) override {
|
||||
static_assert(
|
||||
bridging::getParameterCount(&T::getStatusFraction) == 2,
|
||||
\\"Expected getStatusFraction(...) to have 2 parameters\\");
|
||||
|
||||
return bridging::callFromJs<jsi::Value>(
|
||||
rt, &T::getStatusFraction, jsInvoker_, instance_, std::move(statusProp));
|
||||
}
|
||||
jsi::Object getStateType(jsi::Runtime &rt, jsi::String a, jsi::String b, jsi::Value c, jsi::Value d) override {
|
||||
static_assert(
|
||||
bridging::getParameterCount(&T::getStateType) == 5,
|
||||
\\"Expected getStateType(...) to have 5 parameters\\");
|
||||
bridging::getParameterCount(&T::getStateType) == 4,
|
||||
\\"Expected getStateType(...) to have 4 parameters\\");
|
||||
|
||||
return bridging::callFromJs<jsi::Object>(
|
||||
rt, &T::getStateType, jsInvoker_, instance_, std::move(a), std::move(b), std::move(c), std::move(d));
|
||||
rt, &T::getStateType, jsInvoker_, instance_, std::move(a), std::move(b), std::move(c));
|
||||
}
|
||||
jsi::Object getStateTypeWithEnums(jsi::Runtime &rt, jsi::Object paramOfTypeWithEnums) override {
|
||||
static_assert(
|
||||
|
||||
+4
-27
@@ -105,7 +105,6 @@ namespace JS {
|
||||
NSString *regular() const;
|
||||
NSString *str() const;
|
||||
double num() const;
|
||||
double fraction() const;
|
||||
|
||||
StateTypeWithEnums(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
@@ -122,11 +121,9 @@ namespace JS {
|
||||
- (NSString *)getStatusRegular:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSString *)getStatusStr:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSNumber *)getStatusNum:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSNumber *)getStatusFraction:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSDictionary *)getStateType:(NSString *)a
|
||||
b:(NSString *)b
|
||||
c:(double)c
|
||||
d:(double)d;
|
||||
c:(double)c;
|
||||
- (NSDictionary *)getStateTypeWithEnums:(JS::NativeEnumTurboModule::StateTypeWithEnums &)paramOfTypeWithEnums;
|
||||
|
||||
@end
|
||||
@@ -1055,11 +1052,6 @@ inline double JS::NativeEnumTurboModule::StateTypeWithEnums::num() const
|
||||
id const p = _v[@\\"num\\"];
|
||||
return RCTBridgingToDouble(p);
|
||||
}
|
||||
inline double JS::NativeEnumTurboModule::StateTypeWithEnums::fraction() const
|
||||
{
|
||||
id const p = _v[@\\"fraction\\"];
|
||||
return RCTBridgingToDouble(p);
|
||||
}
|
||||
|
||||
|
||||
inline bool JS::NativeObjectTurboModule::SpecDifficultObjectAE::D() const
|
||||
@@ -1457,7 +1449,6 @@ namespace JS {
|
||||
NSString *regular() const;
|
||||
NSString *str() const;
|
||||
double num() const;
|
||||
double fraction() const;
|
||||
|
||||
StateTypeWithEnums(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
@@ -1474,11 +1465,9 @@ namespace JS {
|
||||
- (NSString *)getStatusRegular:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSString *)getStatusStr:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSNumber *)getStatusNum:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSNumber *)getStatusFraction:(JS::NativeEnumTurboModule::StateType &)statusProp;
|
||||
- (NSDictionary *)getStateType:(NSString *)a
|
||||
b:(NSString *)b
|
||||
c:(double)c
|
||||
d:(double)d;
|
||||
c:(double)c;
|
||||
- (NSDictionary *)getStateTypeWithEnums:(JS::NativeEnumTurboModule::StateTypeWithEnums &)paramOfTypeWithEnums;
|
||||
|
||||
@end
|
||||
@@ -2407,11 +2396,6 @@ inline double JS::NativeEnumTurboModule::StateTypeWithEnums::num() const
|
||||
id const p = _v[@\\"num\\"];
|
||||
return RCTBridgingToDouble(p);
|
||||
}
|
||||
inline double JS::NativeEnumTurboModule::StateTypeWithEnums::fraction() const
|
||||
{
|
||||
id const p = _v[@\\"fraction\\"];
|
||||
return RCTBridgingToDouble(p);
|
||||
}
|
||||
|
||||
|
||||
inline bool JS::NativeObjectTurboModule::SpecDifficultObjectAE::D() const
|
||||
@@ -2815,12 +2799,8 @@ namespace facebook::react {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, NumberKind, \\"getStatusNum\\", @selector(getStatusNum:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeEnumTurboModuleSpecJSI_getStatusFraction(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, NumberKind, \\"getStatusFraction\\", @selector(getStatusFraction:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeEnumTurboModuleSpecJSI_getStateType(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, ObjectKind, \\"getStateType\\", @selector(getStateType:b:c:d:), args, count);
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, ObjectKind, \\"getStateType\\", @selector(getStateType:b:c:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeEnumTurboModuleSpecJSI_getStateTypeWithEnums(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
@@ -2839,10 +2819,7 @@ namespace facebook::react {
|
||||
methodMap_[\\"getStatusNum\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleSpecJSI_getStatusNum};
|
||||
setMethodArgConversionSelector(@\\"getStatusNum\\", 0, @\\"JS_NativeEnumTurboModule_StateType:\\");
|
||||
|
||||
methodMap_[\\"getStatusFraction\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleSpecJSI_getStatusFraction};
|
||||
setMethodArgConversionSelector(@\\"getStatusFraction\\", 0, @\\"JS_NativeEnumTurboModule_StateType:\\");
|
||||
|
||||
methodMap_[\\"getStateType\\"] = MethodMetadata {4, __hostFunction_NativeEnumTurboModuleSpecJSI_getStateType};
|
||||
methodMap_[\\"getStateType\\"] = MethodMetadata {3, __hostFunction_NativeEnumTurboModuleSpecJSI_getStateType};
|
||||
|
||||
|
||||
methodMap_[\\"getStateTypeWithEnums\\"] = MethodMetadata {1, __hostFunction_NativeEnumTurboModuleSpecJSI_getStateTypeWithEnums};
|
||||
|
||||
@@ -32,7 +32,6 @@ const {getEnumName, toSafeCppString} = require('../Utils');
|
||||
const {indent} = require('../Utils');
|
||||
const {
|
||||
createAliasResolver,
|
||||
getAreEnumMembersInteger,
|
||||
getModules,
|
||||
isArrayRecursiveMember,
|
||||
isDirectRecursiveMember,
|
||||
@@ -344,7 +343,7 @@ ${value.properties
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
type NativeEnumMemberValueType = 'std::string' | 'int32_t' | 'float';
|
||||
type NativeEnumMemberValueType = 'std::string' | 'int32_t';
|
||||
|
||||
const EnumTemplate = ({
|
||||
enumName,
|
||||
@@ -399,16 +398,10 @@ function generateEnum(
|
||||
const enumName = getEnumName(moduleName, origEnumName);
|
||||
|
||||
const nativeEnumMemberType: NativeEnumMemberValueType =
|
||||
memberType === 'StringTypeAnnotation'
|
||||
? 'std::string'
|
||||
: getAreEnumMembersInteger(members)
|
||||
? 'int32_t'
|
||||
: 'float';
|
||||
memberType === 'StringTypeAnnotation' ? 'std::string' : 'int32_t';
|
||||
|
||||
const getMemberValueAppearance = (value: string) =>
|
||||
memberType === 'StringTypeAnnotation'
|
||||
? `"${value}"`
|
||||
: `${value}${nativeEnumMemberType === 'float' ? 'f' : ''}`;
|
||||
memberType === 'StringTypeAnnotation' ? `"${value}"` : `${value}`;
|
||||
|
||||
const fromCases =
|
||||
members
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
import type {
|
||||
NativeModuleAliasMap,
|
||||
NativeModuleEnumMembers,
|
||||
NativeModuleObjectTypeAnnotation,
|
||||
NativeModuleSchema,
|
||||
NativeModuleTypeAnnotation,
|
||||
@@ -78,14 +77,9 @@ function isArrayRecursiveMember(
|
||||
);
|
||||
}
|
||||
|
||||
function getAreEnumMembersInteger(members: NativeModuleEnumMembers): boolean {
|
||||
return !members.some(m => `${m.value}`.includes('.'));
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createAliasResolver,
|
||||
getModules,
|
||||
getAreEnumMembersInteger,
|
||||
isDirectRecursiveMember,
|
||||
isArrayRecursiveMember,
|
||||
};
|
||||
|
||||
+10
-10
@@ -240,9 +240,9 @@ template <>
|
||||
struct Bridging<SampleTurboModuleCxxEnumFloat> {
|
||||
static SampleTurboModuleCxxEnumFloat fromJs(jsi::Runtime &rt, const jsi::Value &rawValue) {
|
||||
double value = (double)rawValue.asNumber();
|
||||
if (value == 1.23f) {
|
||||
if (value == 1.23) {
|
||||
return SampleTurboModuleCxxEnumFloat::FA;
|
||||
} else if (value == 4.56f) {
|
||||
} else if (value == 4.56) {
|
||||
return SampleTurboModuleCxxEnumFloat::FB;
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for value\\");
|
||||
@@ -251,9 +251,9 @@ struct Bridging<SampleTurboModuleCxxEnumFloat> {
|
||||
|
||||
static jsi::Value toJs(jsi::Runtime &rt, SampleTurboModuleCxxEnumFloat value) {
|
||||
if (value == SampleTurboModuleCxxEnumFloat::FA) {
|
||||
return bridging::toJs(rt, 1.23f);
|
||||
return bridging::toJs(rt, 1.23);
|
||||
} else if (value == SampleTurboModuleCxxEnumFloat::FB) {
|
||||
return bridging::toJs(rt, 4.56f);
|
||||
return bridging::toJs(rt, 4.56);
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for enum value\\");
|
||||
}
|
||||
@@ -1815,11 +1815,11 @@ template <>
|
||||
struct Bridging<SampleTurboModuleFloatEnum> {
|
||||
static SampleTurboModuleFloatEnum fromJs(jsi::Runtime &rt, const jsi::Value &rawValue) {
|
||||
double value = (double)rawValue.asNumber();
|
||||
if (value == 0.0f) {
|
||||
if (value == 0.0) {
|
||||
return SampleTurboModuleFloatEnum::POINT_ZERO;
|
||||
} else if (value == 0.1f) {
|
||||
} else if (value == 0.1) {
|
||||
return SampleTurboModuleFloatEnum::POINT_ONE;
|
||||
} else if (value == 0.2f) {
|
||||
} else if (value == 0.2) {
|
||||
return SampleTurboModuleFloatEnum::POINT_TWO;
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for value\\");
|
||||
@@ -1828,11 +1828,11 @@ struct Bridging<SampleTurboModuleFloatEnum> {
|
||||
|
||||
static jsi::Value toJs(jsi::Runtime &rt, SampleTurboModuleFloatEnum value) {
|
||||
if (value == SampleTurboModuleFloatEnum::POINT_ZERO) {
|
||||
return bridging::toJs(rt, 0.0f);
|
||||
return bridging::toJs(rt, 0.0);
|
||||
} else if (value == SampleTurboModuleFloatEnum::POINT_ONE) {
|
||||
return bridging::toJs(rt, 0.1f);
|
||||
return bridging::toJs(rt, 0.1);
|
||||
} else if (value == SampleTurboModuleFloatEnum::POINT_TWO) {
|
||||
return bridging::toJs(rt, 0.2f);
|
||||
return bridging::toJs(rt, 0.2);
|
||||
} else {
|
||||
throw jsi::JSError(rt, \\"No appropriate enum member found for enum value\\");
|
||||
}
|
||||
|
||||
+2
-12
@@ -670,11 +670,6 @@ export enum Resolution {
|
||||
High = 1080,
|
||||
}
|
||||
|
||||
export enum Floppy {
|
||||
LowDensity = 0.72,
|
||||
HighDensity = 1.44,
|
||||
}
|
||||
|
||||
export enum StringOptions {
|
||||
One = 'one',
|
||||
Two = 'two',
|
||||
@@ -682,7 +677,7 @@ export enum StringOptions {
|
||||
}
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
getEnums(quality: Quality, resolution?: Resolution, floppy: Floppy, stringOptions: StringOptions): string;
|
||||
getEnums(quality: Quality, resolution?: Resolution, stringOptions: StringOptions): string;
|
||||
}
|
||||
|
||||
export default TurboModuleRegistry.getEnforcing<Spec>('SampleTurboModuleIOS');
|
||||
@@ -720,11 +715,6 @@ export enum Resolution {
|
||||
High = 1080,
|
||||
}
|
||||
|
||||
export enum Floppy {
|
||||
LowDensity = 0.72,
|
||||
HighDensity = 1.44,
|
||||
}
|
||||
|
||||
export enum StringOptions {
|
||||
One = 'one',
|
||||
Two = 'two',
|
||||
@@ -751,7 +741,7 @@ export type CustomDeviceEvent = {
|
||||
export interface Spec extends TurboModule {
|
||||
+getCallback: () => () => void;
|
||||
+getMixed: (arg: mixed) => mixed;
|
||||
+getEnums: (quality: Quality, resolution?: Resolution, floppy: Floppy, stringOptions: StringOptions) => string;
|
||||
+getEnums: (quality: Quality, resolution?: Resolution, stringOptions: StringOptions) => string;
|
||||
+getBinaryTreeNode: (arg: BinaryTreeNode) => BinaryTreeNode;
|
||||
+getGraphNode: (arg: GraphNode) => GraphNode;
|
||||
+getMap: (arg: {[a: string]: ?number}) => {[b: string]: ?number};
|
||||
|
||||
-48
@@ -161,21 +161,6 @@ exports[`RN Codegen Flow Parser can generate fixture CXX_ONLY_NATIVE_MODULE 1`]
|
||||
}
|
||||
]
|
||||
},
|
||||
'Floppy': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
'memberType': 'NumberTypeAnnotation',
|
||||
'members': [
|
||||
{
|
||||
'name': 'LowDensity',
|
||||
'value': 0.72
|
||||
},
|
||||
{
|
||||
'name': 'HighDensity',
|
||||
'value': 1.44
|
||||
}
|
||||
]
|
||||
},
|
||||
'StringOptions': {
|
||||
'name': 'StringOptions',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
@@ -259,15 +244,6 @@ exports[`RN Codegen Flow Parser can generate fixture CXX_ONLY_NATIVE_MODULE 1`]
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'floppy',
|
||||
'optional': false,
|
||||
'typeAnnotation': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclaration',
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'stringOptions',
|
||||
'optional': false,
|
||||
@@ -488,21 +464,6 @@ exports[`RN Codegen Flow Parser can generate fixture IOS_ONLY_NATIVE_MODULE 1`]
|
||||
}
|
||||
]
|
||||
},
|
||||
'Floppy': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
'memberType': 'NumberTypeAnnotation',
|
||||
'members': [
|
||||
{
|
||||
'name': 'LowDensity',
|
||||
'value': 0.72
|
||||
},
|
||||
{
|
||||
'name': 'HighDensity',
|
||||
'value': 1.44
|
||||
}
|
||||
]
|
||||
},
|
||||
'StringOptions': {
|
||||
'name': 'StringOptions',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
@@ -552,15 +513,6 @@ exports[`RN Codegen Flow Parser can generate fixture IOS_ONLY_NATIVE_MODULE 1`]
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'floppy',
|
||||
'optional': false,
|
||||
'typeAnnotation': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclaration',
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'stringOptions',
|
||||
'optional': false,
|
||||
|
||||
@@ -22,6 +22,7 @@ import type {Parser} from '../../parser';
|
||||
import type {ParserErrorCapturer, TypeDeclarationMap} from '../../utils';
|
||||
|
||||
const {
|
||||
UnsupportedEnumDeclarationParserError,
|
||||
UnsupportedGenericParserError,
|
||||
UnsupportedTypeAnnotationParserError,
|
||||
} = require('../../errors');
|
||||
@@ -227,6 +228,19 @@ function translateTypeAnnotation(
|
||||
}
|
||||
case 'EnumStringBody':
|
||||
case 'EnumNumberBody': {
|
||||
if (
|
||||
typeAnnotation.type === 'EnumNumberBody' &&
|
||||
typeAnnotation.members.some(
|
||||
m =>
|
||||
m.type === 'EnumNumberMember' && !Number.isInteger(m.init?.value),
|
||||
)
|
||||
) {
|
||||
throw new UnsupportedEnumDeclarationParserError(
|
||||
hasteModuleName,
|
||||
typeAnnotation,
|
||||
parser.language(),
|
||||
);
|
||||
}
|
||||
return typeEnumResolution(
|
||||
typeAnnotation,
|
||||
typeResolutionStatus,
|
||||
|
||||
+2
-12
@@ -766,11 +766,6 @@ export enum Resolution {
|
||||
High = 1080,
|
||||
}
|
||||
|
||||
export enum Floppy {
|
||||
LowDensity = 0.72,
|
||||
HighDensity = 1.44,
|
||||
}
|
||||
|
||||
export enum StringOptions {
|
||||
One = 'one',
|
||||
Two = 'two',
|
||||
@@ -778,7 +773,7 @@ export enum StringOptions {
|
||||
}
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
readonly getEnums: (quality: Quality, resolution?: Resolution, floppy: Floppy, stringOptions: StringOptions) => string;
|
||||
readonly getEnums: (quality: Quality, resolution?: Resolution, stringOptions: StringOptions) => string;
|
||||
}
|
||||
|
||||
export default TurboModuleRegistry.getEnforcing<Spec>(
|
||||
@@ -809,11 +804,6 @@ export enum Resolution {
|
||||
High = 1080,
|
||||
}
|
||||
|
||||
export enum Floppy {
|
||||
LowDensity = 0.72,
|
||||
HighDensity = 1.44,
|
||||
}
|
||||
|
||||
export enum StringOptions {
|
||||
One = 'one',
|
||||
Two = 'two',
|
||||
@@ -845,7 +835,7 @@ export type CustomDeviceEvent = {
|
||||
export interface Spec extends TurboModule {
|
||||
readonly getCallback: () => () => void;
|
||||
readonly getMixed: (arg: unknown) => unknown;
|
||||
readonly getEnums: (quality: Quality, resolution?: Resolution, floppy: Floppy, stringOptions: StringOptions) => string;
|
||||
readonly getEnums: (quality: Quality, resolution?: Resolution, stringOptions: StringOptions) => string;
|
||||
readonly getBinaryTreeNode: (arg: BinaryTreeNode) => BinaryTreeNode;
|
||||
readonly getGraphNode: (arg: GraphNode) => GraphNode;
|
||||
readonly getMap: (arg: {[a: string]: number | null;}) => {[b: string]: number | null;};
|
||||
|
||||
-48
@@ -152,21 +152,6 @@ exports[`RN Codegen TypeScript Parser can generate fixture CXX_ONLY_NATIVE_MODUL
|
||||
}
|
||||
]
|
||||
},
|
||||
'Floppy': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
'memberType': 'NumberTypeAnnotation',
|
||||
'members': [
|
||||
{
|
||||
'name': 'LowDensity',
|
||||
'value': 0.72
|
||||
},
|
||||
{
|
||||
'name': 'HighDensity',
|
||||
'value': 1.44
|
||||
}
|
||||
]
|
||||
},
|
||||
'StringOptions': {
|
||||
'name': 'StringOptions',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
@@ -250,15 +235,6 @@ exports[`RN Codegen TypeScript Parser can generate fixture CXX_ONLY_NATIVE_MODUL
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'floppy',
|
||||
'optional': false,
|
||||
'typeAnnotation': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclaration',
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'stringOptions',
|
||||
'optional': false,
|
||||
@@ -479,21 +455,6 @@ exports[`RN Codegen TypeScript Parser can generate fixture IOS_ONLY_NATIVE_MODUL
|
||||
}
|
||||
]
|
||||
},
|
||||
'Floppy': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
'memberType': 'NumberTypeAnnotation',
|
||||
'members': [
|
||||
{
|
||||
'name': 'LowDensity',
|
||||
'value': 0.72
|
||||
},
|
||||
{
|
||||
'name': 'HighDensity',
|
||||
'value': 1.44
|
||||
}
|
||||
]
|
||||
},
|
||||
'StringOptions': {
|
||||
'name': 'StringOptions',
|
||||
'type': 'EnumDeclarationWithMembers',
|
||||
@@ -543,15 +504,6 @@ exports[`RN Codegen TypeScript Parser can generate fixture IOS_ONLY_NATIVE_MODUL
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'floppy',
|
||||
'optional': false,
|
||||
'typeAnnotation': {
|
||||
'name': 'Floppy',
|
||||
'type': 'EnumDeclaration',
|
||||
'memberType': 'NumberTypeAnnotation'
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'stringOptions',
|
||||
'optional': false,
|
||||
|
||||
@@ -25,6 +25,8 @@ import type {
|
||||
TypeResolutionStatus,
|
||||
} from '../../utils';
|
||||
|
||||
import {UnsupportedEnumDeclarationParserError} from '../../errors';
|
||||
|
||||
const {
|
||||
UnsupportedGenericParserError,
|
||||
UnsupportedTypeAnnotationParserError,
|
||||
@@ -342,6 +344,20 @@ function translateTypeAnnotation(
|
||||
);
|
||||
}
|
||||
case 'TSEnumDeclaration': {
|
||||
if (
|
||||
typeAnnotation.members.some(
|
||||
m =>
|
||||
m.initializer &&
|
||||
m.initializer.type === 'NumericLiteral' &&
|
||||
!Number.isInteger(m.initializer.value),
|
||||
)
|
||||
) {
|
||||
throw new UnsupportedEnumDeclarationParserError(
|
||||
hasteModuleName,
|
||||
typeAnnotation,
|
||||
parser.language(),
|
||||
);
|
||||
}
|
||||
return typeEnumResolution(
|
||||
typeAnnotation,
|
||||
typeResolutionStatus,
|
||||
|
||||
@@ -81,10 +81,10 @@ GraphNode NativeCxxModuleExample::getGraphNode(
|
||||
return arg;
|
||||
}
|
||||
|
||||
NativeCxxModuleExampleCxxEnumFloat NativeCxxModuleExample::getNumEnum(
|
||||
NativeCxxModuleExampleCxxEnumInt NativeCxxModuleExample::getNumEnum(
|
||||
jsi::Runtime& rt,
|
||||
NativeCxxModuleExampleCxxEnumInt arg) {
|
||||
return NativeCxxModuleExampleCxxEnumFloat::FB;
|
||||
return arg;
|
||||
}
|
||||
|
||||
NativeCxxModuleExampleCxxEnumStr NativeCxxModuleExample::getStrEnum(
|
||||
|
||||
@@ -161,7 +161,7 @@ class NativeCxxModuleExample
|
||||
|
||||
GraphNode getGraphNode(jsi::Runtime& rt, GraphNode arg);
|
||||
|
||||
NativeCxxModuleExampleCxxEnumFloat getNumEnum(
|
||||
NativeCxxModuleExampleCxxEnumInt getNumEnum(
|
||||
jsi::Runtime& rt,
|
||||
NativeCxxModuleExampleCxxEnumInt arg);
|
||||
|
||||
|
||||
@@ -17,11 +17,6 @@ export enum EnumInt {
|
||||
IB = 42,
|
||||
}
|
||||
|
||||
export enum EnumFloat {
|
||||
FA = 1.23,
|
||||
FB = 4.56,
|
||||
}
|
||||
|
||||
export enum EnumNone {
|
||||
NA,
|
||||
NB,
|
||||
@@ -89,7 +84,7 @@ export interface Spec extends TurboModule {
|
||||
+consumeCustomHostObject: (customHostObject: CustomHostObject) => string;
|
||||
+getBinaryTreeNode: (arg: BinaryTreeNode) => BinaryTreeNode;
|
||||
+getGraphNode: (arg: GraphNode) => GraphNode;
|
||||
+getNumEnum: (arg: EnumInt) => EnumFloat;
|
||||
+getNumEnum: (arg: EnumInt) => EnumInt;
|
||||
+getStrEnum: (arg: EnumNone) => EnumStr;
|
||||
+getMap: (arg: {[key: string]: ?number}) => {[key: string]: ?number};
|
||||
+getNumber: (arg: number) => number;
|
||||
|
||||
Reference in New Issue
Block a user