2015-03-23 20:28:42 +00:00
|
|
|
/**
|
|
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD-style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*/
|
2015-02-20 04:10:52 +00:00
|
|
|
|
|
|
|
#import <JavaScriptCore/JavaScriptCore.h>
|
|
|
|
|
2016-11-23 15:47:52 +00:00
|
|
|
#import <React/RCTJavaScriptExecutor.h>
|
2015-02-20 04:10:52 +00:00
|
|
|
|
2016-07-18 14:12:19 +00:00
|
|
|
typedef void (^RCTJavaScriptValueCallback)(JSValue *result, NSError *error);
|
|
|
|
|
2016-02-12 11:49:51 +00:00
|
|
|
/**
|
|
|
|
* Default name for the JS thread
|
|
|
|
*/
|
|
|
|
RCT_EXTERN NSString *const RCTJSCThreadName;
|
|
|
|
|
2016-02-15 20:57:21 +00:00
|
|
|
/**
|
|
|
|
* This notification fires on the JS thread immediately after a `JSContext`
|
|
|
|
* is fully initialized, but before the JS bundle has been loaded. The object
|
|
|
|
* of this notification is the `JSContext`. Native modules should listen for
|
|
|
|
* notification only if they need to install custom functionality into the
|
|
|
|
* context. Note that this notification won't fire when debugging in Chrome.
|
|
|
|
*/
|
|
|
|
RCT_EXTERN NSString *const RCTJavaScriptContextCreatedNotification;
|
|
|
|
|
2016-09-27 16:33:10 +00:00
|
|
|
/**
|
|
|
|
* A key to a reference to a JSContext class, held in the the current thread's
|
|
|
|
* dictionary. The reference would point to the JSContext class in the JS VM
|
|
|
|
* used in React (or ComponenetScript). It is recommended not to access it
|
|
|
|
* through the thread's dictionary, but rather to use the `FBJSCurrentContext()`
|
|
|
|
* accessor, which will return the current JSContext in the currently used VM.
|
|
|
|
*/
|
|
|
|
RCT_EXTERN NSString *const RCTFBJSContextClassKey;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A key to a reference to a JSValue class, held in the the current thread's
|
|
|
|
* dictionary. The reference would point to the JSValue class in the JS VM
|
|
|
|
* used in React (or ComponenetScript). It is recommended not to access it
|
|
|
|
* through the thread's dictionary, but rather to use the `FBJSValue()` accessor.
|
|
|
|
*/
|
|
|
|
RCT_EXTERN NSString *const RCTFBJSValueClassKey;
|
|
|
|
|
2016-07-08 19:19:27 +00:00
|
|
|
/**
|
|
|
|
* @experimental
|
|
|
|
* May be used to pre-create the JSContext to make RCTJSCExecutor creation less costly.
|
|
|
|
* Avoid using this; it's experimental and is not likely to be supported long-term.
|
|
|
|
*/
|
|
|
|
@interface RCTJSContextProvider : NSObject
|
|
|
|
|
2016-11-11 13:21:39 +00:00
|
|
|
- (instancetype)initWithUseCustomJSCLibrary:(BOOL)useCustomJSCLibrary
|
|
|
|
tryBytecode:(BOOL)tryBytecode;
|
2016-07-08 19:19:27 +00:00
|
|
|
|
2016-10-07 14:47:23 +00:00
|
|
|
/**
|
|
|
|
* Marks whether the provider uses the custom implementation of JSC and not the system one.
|
|
|
|
*/
|
|
|
|
@property (nonatomic, readonly, assign) BOOL useCustomJSCLibrary;
|
|
|
|
|
2016-11-11 13:21:39 +00:00
|
|
|
/**
|
|
|
|
* Marks whether it is safe to try and run bytecode if given the choice.
|
|
|
|
*/
|
|
|
|
@property (nonatomic, readonly) BOOL tryBytecode;
|
|
|
|
|
2016-07-08 19:19:27 +00:00
|
|
|
@end
|
|
|
|
|
2016-05-31 19:50:48 +00:00
|
|
|
/**
|
|
|
|
* Uses a JavaScriptCore context as the execution engine.
|
|
|
|
*/
|
|
|
|
@interface RCTJSCExecutor : NSObject <RCTJavaScriptExecutor>
|
|
|
|
|
|
|
|
/**
|
2016-06-06 18:10:24 +00:00
|
|
|
* Returns whether executor uses custom JSC library.
|
|
|
|
* This value is used to initialize RCTJSCWrapper.
|
2016-05-31 19:50:48 +00:00
|
|
|
* @default is NO.
|
|
|
|
*/
|
2016-06-06 18:10:24 +00:00
|
|
|
@property (nonatomic, readonly, assign) BOOL useCustomJSCLibrary;
|
2016-05-31 19:50:48 +00:00
|
|
|
|
2016-11-11 13:21:37 +00:00
|
|
|
/**
|
|
|
|
* Returns the bytecode file format that the underlying runtime supports.
|
|
|
|
*/
|
|
|
|
@property (nonatomic, readonly) int32_t bytecodeFileFormatVersion;
|
|
|
|
|
2016-10-14 18:29:47 +00:00
|
|
|
/**
|
|
|
|
* Specify a name for the JSContext used, which will be visible in debugging tools
|
|
|
|
* @default is "RCTJSContext"
|
|
|
|
*/
|
|
|
|
@property (nonatomic, copy) NSString *contextName;
|
|
|
|
|
2016-05-31 19:50:48 +00:00
|
|
|
/**
|
2016-06-06 18:10:24 +00:00
|
|
|
* Inits a new executor instance with given flag that's used
|
2016-05-31 19:50:48 +00:00
|
|
|
* to initialize RCTJSCWrapper.
|
|
|
|
*/
|
2016-06-06 18:10:24 +00:00
|
|
|
- (instancetype)initWithUseCustomJSCLibrary:(BOOL)useCustomJSCLibrary;
|
2016-05-31 19:50:48 +00:00
|
|
|
|
2016-11-11 13:21:39 +00:00
|
|
|
/**
|
|
|
|
* @experimental
|
|
|
|
* Inits a new executor instance with given configuration flags. Please refer to
|
|
|
|
* the documentation for `RCTJSContextProvider` for more information as to their
|
|
|
|
* purpose.
|
|
|
|
*/
|
|
|
|
- (instancetype)initWithUseCustomJSCLibrary:(BOOL)useCustomJSCLibrary
|
|
|
|
tryBytecode:(BOOL)tryBytecode;
|
|
|
|
|
2016-07-07 20:31:14 +00:00
|
|
|
/**
|
2016-07-12 12:13:30 +00:00
|
|
|
* @experimental
|
|
|
|
* Pass a RCTJSContextProvider object to use an NSThread/JSContext pair that have already been created.
|
2016-11-03 17:45:06 +00:00
|
|
|
* The underlying JSContext will be returned in the JSContext pointer if it is non-NULL.
|
2016-07-07 20:31:14 +00:00
|
|
|
*/
|
2016-07-12 12:13:30 +00:00
|
|
|
+ (instancetype)initializedExecutorWithContextProvider:(RCTJSContextProvider *)JSContextProvider
|
2016-11-03 17:45:06 +00:00
|
|
|
JSContext:(JSContext **)JSContext;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @experimental
|
|
|
|
* synchronouslyExecuteApplicationScript:sourceURL:JSContext:error:
|
|
|
|
*
|
|
|
|
* Run the provided JS Script/Bundle, blocking the caller until it finishes.
|
|
|
|
* If there is an error during execution, it is returned, otherwise `NULL` is
|
|
|
|
* returned.
|
|
|
|
*/
|
|
|
|
- (NSError *)synchronouslyExecuteApplicationScript:(NSData *)script
|
|
|
|
sourceURL:(NSURL *)sourceURL;
|
2016-07-07 20:31:14 +00:00
|
|
|
|
2016-07-18 14:12:19 +00:00
|
|
|
/**
|
|
|
|
* Invokes the given module/method directly. The completion block will be called with the
|
|
|
|
* JSValue returned by the JS context.
|
|
|
|
*
|
|
|
|
* Currently this does not flush the JS-to-native message queue.
|
|
|
|
*/
|
|
|
|
- (void)callFunctionOnModule:(NSString *)module
|
|
|
|
method:(NSString *)method
|
|
|
|
arguments:(NSArray *)args
|
|
|
|
jsValueCallback:(RCTJavaScriptValueCallback)onComplete;
|
|
|
|
|
2016-10-26 10:43:05 +00:00
|
|
|
/**
|
|
|
|
* Get the JavaScriptCore context associated with this executor instance.
|
|
|
|
*/
|
|
|
|
- (JSContext *)jsContext;
|
|
|
|
|
2015-02-20 04:10:52 +00:00
|
|
|
@end
|