1dc51e206SEvan Baconimport { getConfig, Platform, ProjectTarget } from '@expo/config'; 2dc51e206SEvan Bacon 3*8a424bebSJames Ideimport { bundleAsync, BundleOutput } from './fork-bundleAsync'; 40a6ddb20SEvan Baconimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware'; 5dc51e206SEvan Bacon 6dc51e206SEvan Baconexport type PublishOptions = { 7dc51e206SEvan Bacon releaseChannel?: string; 8dc51e206SEvan Bacon target?: ProjectTarget; 9dc51e206SEvan Bacon resetCache?: boolean; 10dc51e206SEvan Bacon maxWorkers?: number; 11dc51e206SEvan Bacon}; 12dc51e206SEvan Bacon 13dc51e206SEvan Bacon// TODO: Reduce layers of indirection 14dc51e206SEvan Baconexport async function createBundlesAsync( 15dc51e206SEvan Bacon projectRoot: string, 16dc51e206SEvan Bacon publishOptions: PublishOptions = {}, 171a3d836eSEvan Bacon bundleOptions: { platforms: Platform[]; dev?: boolean; minify?: boolean } 18dc51e206SEvan Bacon): Promise<Partial<Record<Platform, BundleOutput>>> { 199580591fSEvan Bacon if (!bundleOptions.platforms.length) { 209580591fSEvan Bacon return {}; 219580591fSEvan Bacon } 220a6ddb20SEvan Bacon const projectConfig = getConfig(projectRoot, { skipSDKVersionRequirement: true }); 230a6ddb20SEvan Bacon const { exp } = projectConfig; 24dc51e206SEvan Bacon 25dc51e206SEvan Bacon const bundles = await bundleAsync( 26dc51e206SEvan Bacon projectRoot, 27dc51e206SEvan Bacon exp, 28dc51e206SEvan Bacon { 29dc51e206SEvan Bacon // If not legacy, ignore the target option to prevent warnings from being thrown. 30dc51e206SEvan Bacon resetCache: publishOptions.resetCache, 31dc51e206SEvan Bacon maxWorkers: publishOptions.maxWorkers, 32dc51e206SEvan Bacon quiet: false, 33dc51e206SEvan Bacon }, 34dc51e206SEvan Bacon bundleOptions.platforms.map((platform: Platform) => ({ 35dc51e206SEvan Bacon platform, 360a6ddb20SEvan Bacon entryPoint: getEntryWithServerRoot(projectRoot, projectConfig, platform), 371a3d836eSEvan Bacon minify: bundleOptions.minify, 38dc51e206SEvan Bacon dev: bundleOptions.dev, 39dc51e206SEvan Bacon })) 40dc51e206SEvan Bacon ); 41dc51e206SEvan Bacon 42dc51e206SEvan Bacon // { ios: bundle, android: bundle } 43dc51e206SEvan Bacon return bundleOptions.platforms.reduce<Partial<Record<Platform, BundleOutput>>>( 44dc51e206SEvan Bacon (prev, platform, index) => ({ 45dc51e206SEvan Bacon ...prev, 46dc51e206SEvan Bacon [platform]: bundles[index], 47dc51e206SEvan Bacon }), 48dc51e206SEvan Bacon {} 49dc51e206SEvan Bacon ); 50dc51e206SEvan Bacon} 51