1 // Copyright 2018-present 650 Industries. All rights reserved. 2 3 #import <Foundation/Foundation.h> 4 #import <ABI47_0_0ExpoModulesCore/ABI47_0_0EXJavaScriptValue.h> 5 #import <ABI47_0_0ExpoModulesCore/ABI47_0_0EXJavaScriptObject.h> 6 #import <ABI47_0_0React/ABI47_0_0RCTBridgeModule.h> 7 8 #ifdef __cplusplus 9 #import <ABI47_0_0ReactCommon/ABI47_0_0CallInvoker.h> 10 11 namespace jsi = ABI47_0_0facebook::jsi; 12 namespace react = ABI47_0_0facebook::ABI47_0_0React; 13 #endif // __cplusplus 14 15 @class ABI47_0_0EXJavaScriptValue; 16 @class ABI47_0_0EXJavaScriptObject; 17 18 typedef void (^JSAsyncFunctionBlock)(ABI47_0_0EXJavaScriptValue * _Nonnull thisValue, 19 NSArray<ABI47_0_0EXJavaScriptValue *> * _Nonnull arguments, 20 ABI47_0_0RCTPromiseResolveBlock _Nonnull resolve, 21 ABI47_0_0RCTPromiseRejectBlock _Nonnull reject); 22 23 typedef id _Nullable (^JSSyncFunctionBlock)(ABI47_0_0EXJavaScriptValue * _Nonnull thisValue, 24 NSArray<ABI47_0_0EXJavaScriptValue *> * _Nonnull arguments, 25 NSError * _Nullable __autoreleasing * _Nullable error); 26 27 #ifdef __cplusplus 28 typedef jsi::Value (^JSHostFunctionBlock)(jsi::Runtime &runtime, 29 std::shared_ptr<react::CallInvoker> callInvoker, 30 ABI47_0_0EXJavaScriptValue * _Nonnull thisValue, 31 NSArray<ABI47_0_0EXJavaScriptValue *> * _Nonnull arguments); 32 #endif // __cplusplus 33 34 NS_SWIFT_NAME(JavaScriptRuntime) 35 @interface ABI47_0_0EXJavaScriptRuntime : NSObject 36 37 /** 38 Creates a new JavaScript runtime. 39 */ 40 - (nonnull instancetype)init; 41 42 #ifdef __cplusplus 43 44 - (nonnull instancetype)initWithRuntime:(nonnull jsi::Runtime *)runtime 45 callInvoker:(std::shared_ptr<react::CallInvoker>)callInvoker; 46 47 /** 48 Returns the underlying runtime object. 49 */ 50 - (nonnull jsi::Runtime *)get; 51 52 /** 53 Returns the call invoker the runtime was initialized with. 54 */ 55 - (std::shared_ptr<react::CallInvoker>)callInvoker; 56 57 /** 58 Wraps given host object to `ABI47_0_0EXJavaScriptObject`. 59 */ 60 - (nonnull ABI47_0_0EXJavaScriptObject *)createHostObject:(std::shared_ptr<jsi::HostObject>)jsiHostObjectPtr; 61 62 #endif // __cplusplus 63 64 /** 65 Returns the runtime global object for use in Swift. 66 */ 67 - (nonnull ABI47_0_0EXJavaScriptObject *)global; 68 69 /** 70 The main object of the Expo runtime that is used to scope native Expo-specific functionalities. 71 It gets installed into the runtime as the `global.expo` object. 72 */ 73 - (nonnull ABI47_0_0EXJavaScriptObject *)mainObject; 74 75 /** 76 Creates a new object for use in Swift. 77 */ 78 - (nonnull ABI47_0_0EXJavaScriptObject *)createObject; 79 80 /** 81 Creates a synchronous host function that runs given block when it's called. 82 The value returned by the block is synchronously returned to JS. 83 \return A JavaScript function represented as a `JavaScriptObject`. 84 */ 85 - (nonnull ABI47_0_0EXJavaScriptObject *)createSyncFunction:(nonnull NSString *)name 86 argsCount:(NSInteger)argsCount 87 block:(nonnull JSSyncFunctionBlock)block NS_REFINED_FOR_SWIFT; 88 89 /** 90 Creates an asynchronous host function that runs given block when it's called. 91 The block receives a resolver that you should call when the asynchronous operation 92 succeeds and a rejecter to call whenever it fails. 93 \return A JavaScript function represented as a `JavaScriptObject`. 94 */ 95 - (nonnull ABI47_0_0EXJavaScriptObject *)createAsyncFunction:(nonnull NSString *)name 96 argsCount:(NSInteger)argsCount 97 block:(nonnull JSAsyncFunctionBlock)block; 98 99 #pragma mark - Classes 100 101 typedef void (^ClassConstructorBlock)(ABI47_0_0EXJavaScriptObject * _Nonnull thisValue, NSArray<ABI47_0_0EXJavaScriptValue *> * _Nonnull arguments); 102 103 - (nonnull ABI47_0_0EXJavaScriptObject *)createClass:(nonnull NSString *)name 104 constructor:(nonnull ClassConstructorBlock)constructor; 105 106 #pragma mark - Script evaluation 107 108 /** 109 Evaluates given JavaScript source code. 110 */ 111 - (nonnull ABI47_0_0EXJavaScriptValue *)evaluateScript:(nonnull NSString *)scriptSource NS_REFINED_FOR_SWIFT; 112 113 @end 114