1/* 2 * Copyright (c) Meta Platforms, Inc. and affiliates. 3 * 4 * This source code is licensed under the MIT license found in the 5 * LICENSE file in the root directory of this source tree. 6 */ 7 8#import <ABI47_0_0React/ABI47_0_0RCTDevSplitBundleLoader.h> 9 10#import <ABI47_0_0FBReactNativeSpec/ABI47_0_0FBReactNativeSpec.h> 11#import <ABI47_0_0React/ABI47_0_0RCTBridge.h> 12#import <ABI47_0_0React/ABI47_0_0RCTBundleURLProvider.h> 13#import <ABI47_0_0React/ABI47_0_0RCTConvert.h> 14#import <ABI47_0_0React/ABI47_0_0RCTDefines.h> 15#import <ABI47_0_0React/ABI47_0_0RCTDevSettings.h> 16#import <ABI47_0_0React/ABI47_0_0RCTUtils.h> 17 18#import "ABI47_0_0CoreModulesPlugins.h" 19 20using namespace ABI47_0_0facebook::ABI47_0_0React; 21 22@interface ABI47_0_0RCTDevSplitBundleLoader () <ABI47_0_0NativeDevSplitBundleLoaderSpec> 23@end 24 25#if ABI47_0_0RCT_DEV_MENU | ABI47_0_0RCT_PACKAGER_LOADING_FUNCTIONALITY 26 27@implementation ABI47_0_0RCTDevSplitBundleLoader 28 29@synthesize bridge = _bridge; 30@synthesize loadScript = _loadScript; 31@synthesize moduleRegistry = _moduleRegistry; 32 33ABI47_0_0RCT_EXPORT_MODULE() 34 35+ (BOOL)requiresMainQueueSetup 36{ 37 return NO; 38} 39 40ABI47_0_0RCT_EXPORT_METHOD(loadBundle 41 : (NSString *)bundlePath resolve 42 : (ABI47_0_0RCTPromiseResolveBlock)resolve reject 43 : (ABI47_0_0RCTPromiseRejectBlock)reject) 44{ 45 NSURL *sourceURL = [[ABI47_0_0RCTBundleURLProvider sharedSettings] jsBundleURLForSplitBundleRoot:bundlePath]; 46 if (_bridge) { 47 [_bridge loadAndExecuteSplitBundleURL:sourceURL 48 onError:^(NSError *error) { 49 reject(@"E_BUNDLE_LOAD_ERROR", [error localizedDescription], error); 50 } 51 onComplete:^() { 52 resolve(@YES); 53 }]; 54 } else { 55 __weak __typeof(self) weakSelf = self; 56 [ABI47_0_0RCTJavaScriptLoader loadBundleAtURL:sourceURL 57 onProgress:^(ABI47_0_0RCTLoadingProgress *progressData) { 58 // TODO: Setup loading bar. 59 } 60 onComplete:^(NSError *error, ABI47_0_0RCTSource *source) { 61 if (error) { 62 reject(@"E_BUNDLE_LOAD_ERROR", [error localizedDescription], error); 63 return; 64 } 65 __typeof(self) strongSelf = weakSelf; 66 strongSelf->_loadScript(source); 67 ABI47_0_0RCTDevSettings *devSettings = [strongSelf->_moduleRegistry moduleForName:"ABI47_0_0RCTDevSettings"]; 68 [devSettings setupHMRClientWithAdditionalBundleURL:source.url]; 69 resolve(@YES); 70 }]; 71 } 72} 73 74- (std::shared_ptr<TurboModule>)getTurboModule:(const ObjCTurboModule::InitParams &)params 75{ 76 return std::make_shared<NativeDevSplitBundleLoaderSpecJSI>(params); 77} 78 79@end 80 81#else 82 83@implementation ABI47_0_0RCTDevSplitBundleLoader 84 85@synthesize loadScript = _loadScript; 86 87+ (NSString *)moduleName 88{ 89 return nil; 90} 91- (void)loadBundle:(NSString *)bundlePath resolve:(ABI47_0_0RCTPromiseResolveBlock)resolve reject:(ABI47_0_0RCTPromiseRejectBlock)reject; 92{ 93} 94- (std::shared_ptr<TurboModule>)getTurboModule:(const ObjCTurboModule::InitParams &)params 95{ 96 return std::make_shared<NativeDevSplitBundleLoaderSpecJSI>(params); 97} 98 99@end 100 101#endif 102 103Class ABI47_0_0RCTDevSplitBundleLoaderCls(void) 104{ 105 return ABI47_0_0RCTDevSplitBundleLoader.class; 106} 107