1 // Copyright 2018-present 650 Industries. All rights reserved. 2 3 #import <ExpoModulesCore/EXJavaScriptValue.h> 4 #import <ExpoModulesCore/EXJavaScriptObject.h> 5 6 #ifdef __cplusplus 7 #import <ReactCommon/CallInvoker.h> 8 9 namespace jsi = facebook::jsi; 10 namespace react = facebook::react; 11 #endif // __cplusplus 12 13 @class EXJavaScriptValue; 14 @class EXJavaScriptObject; 15 16 #ifdef __cplusplus 17 typedef jsi::Value (^JSHostFunctionBlock)(jsi::Runtime &runtime, std::shared_ptr<react::CallInvoker> callInvoker, NSArray<EXJavaScriptValue *> * _Nonnull arguments); 18 #endif // __cplusplus 19 20 NS_SWIFT_NAME(JavaScriptRuntime) 21 @interface EXJavaScriptRuntime : NSObject 22 23 /** 24 Creates a new JavaScript runtime. 25 */ 26 - (nonnull instancetype)init; 27 28 #ifdef __cplusplus 29 - (nonnull instancetype)initWithRuntime:(nonnull jsi::Runtime *)runtime 30 callInvoker:(std::shared_ptr<react::CallInvoker>)callInvoker; 31 32 /** 33 Returns the underlying runtime object. 34 */ 35 - (nonnull jsi::Runtime *)get; 36 37 /** 38 Returns the call invoker the runtime was initialized with. 39 */ 40 - (std::shared_ptr<react::CallInvoker>)callInvoker; 41 42 /** 43 Wraps given host object to `EXJavaScriptObject`. 44 */ 45 - (nonnull EXJavaScriptObject *)createHostObject:(std::shared_ptr<jsi::HostObject>)jsiHostObjectPtr; 46 47 - (jsi::Function)createSyncFunction:(nonnull NSString *)name 48 argsCount:(NSInteger)argsCount 49 block:(nonnull JSSyncFunctionBlock)block; 50 51 - (jsi::Function)createAsyncFunction:(nonnull NSString *)name 52 argsCount:(NSInteger)argsCount 53 block:(nonnull JSAsyncFunctionBlock)block; 54 #endif // __cplusplus 55 56 /** 57 Returns the runtime global object for use in Swift. 58 */ 59 - (nonnull EXJavaScriptObject *)global; 60 61 /** 62 Creates a new object for use in Swift. 63 */ 64 - (nonnull EXJavaScriptObject *)createObject; 65 66 #pragma mark - Script evaluation 67 68 /** 69 Evaluates given JavaScript source code. 70 */ 71 - (nonnull EXJavaScriptValue *)evaluateScript:(nonnull NSString *)scriptSource; 72 73 @end 74