1ec62a260STomasz Sapeta // Copyright 2022-present 650 Industries. All rights reserved.
2ec62a260STomasz Sapeta 
3ec62a260STomasz Sapeta #import <Foundation/Foundation.h>
4ec62a260STomasz Sapeta #import <ExpoModulesCore/EXJavaScriptObject.h>
5ec62a260STomasz Sapeta 
6ec62a260STomasz Sapeta #ifdef __cplusplus
7ec62a260STomasz Sapeta #import <jsi/jsi.h>
8ec62a260STomasz Sapeta namespace jsi = facebook::jsi;
9ec62a260STomasz Sapeta #endif // __cplusplus
10ec62a260STomasz Sapeta 
11ec62a260STomasz Sapeta @class EXJavaScriptRuntime;
12*a2ddfabcSTomasz Sapeta @class EXRawJavaScriptFunction;
13002d516eSTomasz Sapeta @class EXJavaScriptTypedArray;
14ec62a260STomasz Sapeta 
15ec62a260STomasz Sapeta /**
16ec62a260STomasz Sapeta  Represents any JavaScript value. Its purpose is to exposes `facebook::jsi::Value` API back to Swift.
17ec62a260STomasz Sapeta  */
18ec62a260STomasz Sapeta NS_SWIFT_NAME(JavaScriptValue)
19ec62a260STomasz Sapeta @interface EXJavaScriptValue : NSObject
20ec62a260STomasz Sapeta 
21ec62a260STomasz Sapeta #ifdef __cplusplus
22ec62a260STomasz Sapeta - (nonnull instancetype)initWithRuntime:(nonnull EXJavaScriptRuntime *)runtime
23ec62a260STomasz Sapeta                                   value:(std::shared_ptr<jsi::Value>)value;
249bc9ec42STomasz Sapeta 
259bc9ec42STomasz Sapeta /**
269bc9ec42STomasz Sapeta  \return the underlying `jsi::Value`.
279bc9ec42STomasz Sapeta  */
289bc9ec42STomasz Sapeta - (nonnull jsi::Value *)get;
29ec62a260STomasz Sapeta #endif // __cplusplus
30ec62a260STomasz Sapeta 
31ec62a260STomasz Sapeta #pragma mark - Type checking
32ec62a260STomasz Sapeta 
33ec62a260STomasz Sapeta - (BOOL)isUndefined;
34ec62a260STomasz Sapeta - (BOOL)isNull;
35ec62a260STomasz Sapeta - (BOOL)isBool;
36ec62a260STomasz Sapeta - (BOOL)isNumber;
37ec62a260STomasz Sapeta - (BOOL)isString;
38ec62a260STomasz Sapeta - (BOOL)isSymbol;
39ec62a260STomasz Sapeta - (BOOL)isObject;
40ec62a260STomasz Sapeta - (BOOL)isFunction;
41002d516eSTomasz Sapeta - (BOOL)isTypedArray;
42ec62a260STomasz Sapeta 
43ec62a260STomasz Sapeta #pragma mark - Type casting
44ec62a260STomasz Sapeta 
45ec62a260STomasz Sapeta - (nullable id)getRaw;
46ec62a260STomasz Sapeta - (BOOL)getBool;
47ec62a260STomasz Sapeta - (NSInteger)getInt;
48ec62a260STomasz Sapeta - (double)getDouble;
49ec62a260STomasz Sapeta - (nonnull NSString *)getString;
50ec62a260STomasz Sapeta - (nonnull NSArray<EXJavaScriptValue *> *)getArray;
51ec62a260STomasz Sapeta - (nonnull NSDictionary<NSString *, id> *)getDictionary;
52ec62a260STomasz Sapeta - (nonnull EXJavaScriptObject *)getObject;
53*a2ddfabcSTomasz Sapeta - (nonnull EXRawJavaScriptFunction *)getFunction;
54002d516eSTomasz Sapeta - (nullable EXJavaScriptTypedArray *)getTypedArray;
55ec62a260STomasz Sapeta 
56ec62a260STomasz Sapeta #pragma mark - Helpers
57ec62a260STomasz Sapeta 
58ec62a260STomasz Sapeta - (nonnull NSString *)toString;
59ec62a260STomasz Sapeta 
60ec62a260STomasz Sapeta @end
61