1*26ad19fcSEvan Bacon/** 2*26ad19fcSEvan Bacon * Copyright © 2022 650 Industries. 3*26ad19fcSEvan Bacon * 4*26ad19fcSEvan Bacon * This source code is licensed under the MIT license found in the 5*26ad19fcSEvan Bacon * LICENSE file in the root directory of this source tree. 6*26ad19fcSEvan Bacon */ 7*26ad19fcSEvan Baconimport { buildUrlForBundle } from './buildUrlForBundle'; 8*26ad19fcSEvan Baconimport { fetchThenEvalAsync } from './fetchThenEval'; 9*26ad19fcSEvan Bacon// import LoadingView from '../LoadingView'; 10*26ad19fcSEvan Bacon 11*26ad19fcSEvan Baconlet pendingRequests = 0; 12*26ad19fcSEvan Bacon 13*26ad19fcSEvan Bacon/** 14*26ad19fcSEvan Bacon * Load a bundle for a URL using fetch + eval on native and script tag injection on web. 15*26ad19fcSEvan Bacon * 16*26ad19fcSEvan Bacon * @param bundlePath Given a statement like `import('./Bacon')` `bundlePath` would be `Bacon.bundle?params=from-metro`. 17*26ad19fcSEvan Bacon */ 18*26ad19fcSEvan Baconexport async function loadBundleAsync(bundlePath: string): Promise<void> { 19*26ad19fcSEvan Bacon const requestUrl = buildUrlForBundle(bundlePath); 20*26ad19fcSEvan Bacon 21*26ad19fcSEvan Bacon if (process.env.NODE_ENV === 'production') { 22*26ad19fcSEvan Bacon return fetchThenEvalAsync(requestUrl); 23*26ad19fcSEvan Bacon } else { 24*26ad19fcSEvan Bacon const LoadingView = require('../LoadingView') 25*26ad19fcSEvan Bacon .default as typeof import('../LoadingView').default; 26*26ad19fcSEvan Bacon 27*26ad19fcSEvan Bacon // Send a signal to the `expo` package to show the loading indicator. 28*26ad19fcSEvan Bacon LoadingView.showMessage('Downloading...', 'load'); 29*26ad19fcSEvan Bacon 30*26ad19fcSEvan Bacon pendingRequests++; 31*26ad19fcSEvan Bacon 32*26ad19fcSEvan Bacon return fetchThenEvalAsync(requestUrl) 33*26ad19fcSEvan Bacon .then(() => { 34*26ad19fcSEvan Bacon if (process.env.NODE_ENV !== 'production') { 35*26ad19fcSEvan Bacon const HMRClient = require('../HMRClient') 36*26ad19fcSEvan Bacon .default as typeof import('../HMRClient').default; 37*26ad19fcSEvan Bacon HMRClient.registerBundle(requestUrl); 38*26ad19fcSEvan Bacon } 39*26ad19fcSEvan Bacon }) 40*26ad19fcSEvan Bacon .finally(() => { 41*26ad19fcSEvan Bacon if (!--pendingRequests) { 42*26ad19fcSEvan Bacon LoadingView.hide(); 43*26ad19fcSEvan Bacon } 44*26ad19fcSEvan Bacon }); 45*26ad19fcSEvan Bacon } 46*26ad19fcSEvan Bacon} 47