/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import #import #import #import #import #import #import #import #import "CoreModulesPlugins.h" using namespace facebook::react; @interface RCTDevSplitBundleLoader () @end #if RCT_DEV_MENU | RCT_PACKAGER_LOADING_FUNCTIONALITY @implementation RCTDevSplitBundleLoader @synthesize bridge = _bridge; @synthesize loadScript = _loadScript; @synthesize moduleRegistry = _moduleRegistry; RCT_EXPORT_MODULE() + (BOOL)requiresMainQueueSetup { return NO; } RCT_EXPORT_METHOD(loadBundle : (NSString *)bundlePath resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) { NSURL *sourceURL = [[RCTBundleURLProvider sharedSettings] jsBundleURLForSplitBundleRoot:bundlePath]; if (_bridge) { [_bridge loadAndExecuteSplitBundleURL:sourceURL onError:^(NSError *error) { reject(@"E_BUNDLE_LOAD_ERROR", [error localizedDescription], error); } onComplete:^() { resolve(@YES); }]; } else { __weak __typeof(self) weakSelf = self; [RCTJavaScriptLoader loadBundleAtURL:sourceURL onProgress:^(RCTLoadingProgress *progressData) { // TODO: Setup loading bar. } onComplete:^(NSError *error, RCTSource *source) { if (error) { reject(@"E_BUNDLE_LOAD_ERROR", [error localizedDescription], error); return; } __typeof(self) strongSelf = weakSelf; if (strongSelf) { strongSelf->_loadScript(source); RCTDevSettings *devSettings = [strongSelf->_moduleRegistry moduleForName:"RCTDevSettings"]; [devSettings setupHMRClientWithAdditionalBundleURL:source.url]; resolve(@YES); } }]; } } - (std::shared_ptr)getTurboModule:(const ObjCTurboModule::InitParams &)params { return std::make_shared(params); } @end #else @implementation RCTDevSplitBundleLoader @synthesize loadScript = _loadScript; + (NSString *)moduleName { return nil; } - (void)loadBundle:(NSString *)bundlePath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject; { } - (std::shared_ptr)getTurboModule:(const ObjCTurboModule::InitParams &)params { return std::make_shared(params); } @end #endif Class RCTDevSplitBundleLoaderCls(void) { return RCTDevSplitBundleLoader.class; }