// Copyright 2018-present 650 Industries. All rights reserved. #import #ifdef __cplusplus #import namespace jsi = facebook::jsi; namespace react = facebook::react; #endif // __cplusplus NS_SWIFT_NAME(JavaScriptRuntime) @interface EXJavaScriptRuntime : NSObject /** Creates a new JavaScript runtime. */ - (nonnull instancetype)init; #ifdef __cplusplus typedef jsi::Value (^JSHostFunctionBlock)(jsi::Runtime &runtime, std::shared_ptr callInvoker, NSArray * _Nonnull arguments); - (nonnull instancetype)initWithRuntime:(jsi::Runtime *)runtime callInvoker:(std::shared_ptr)callInvoker; /** Returns the underlying runtime object. */ - (nonnull jsi::Runtime *)get; /** Returns the call invoker the runtime was initialized with. */ - (std::shared_ptr)callInvoker; /** Wraps given host object to `EXJavaScriptObject`. */ - (nonnull EXJavaScriptObject *)createHostObject:(std::shared_ptr)jsiHostObjectPtr; - (jsi::Function)createSyncFunction:(nonnull NSString *)name argsCount:(NSInteger)argsCount block:(nonnull JSSyncFunctionBlock)block; - (jsi::Function)createAsyncFunction:(nonnull NSString *)name argsCount:(NSInteger)argsCount block:(nonnull JSAsyncFunctionBlock)block; #endif // __cplusplus /** Returns the runtime global object for use in Swift. */ - (nonnull EXJavaScriptObject *)global; /** Creates a new object for use in Swift. */ - (nonnull EXJavaScriptObject *)createObject; #pragma mark - Script evaluation /** Evaluates given JavaScript source code. */ - (nullable id)evaluateScript:(nonnull NSString *)scriptSource; @end