UNPKG

xdl

Version:
1 lines 16.8 kB
{"version":3,"file":"createBundlesAsync.js","names":["_config","data","require","_devServer","_axios","_interopRequireDefault","_chalk","_internal","obj","__esModule","default","MINIMUM_BUNDLE_SIZE","printBundleSizes","bundles","_bundles$ios","_bundles$ios2","_bundles$android","_bundles$android2","_bundles$ios3","_bundles$ios4","_bundles$android3","_bundles$android4","files","ios","hermesBytecodeBundle","push","code","android","hermesSourcemap","chalk","dim","map","logger","global","info","TableText","createFilesTable","learnMore","createBundlesAsync","projectRoot","publishOptions","bundleOptions","useDevServer","warn","startReactNativeServerAsync","options","nonPersistent","maxWorkers","target","reset","resetCache","verbose","quiet","fetchPublishBundlesAsync","stopReactNativeServerAsync","config","getConfig","skipSDKVersionRequirement","bundleAsync","exp","ProjectUtils","getLogger","unversioned","sdkVersion","platforms","platform","entryPoint","resolveEntryPoint","dev","results","index","length","bundle","opts","publishUrl","UrlUtils","constructPublishUrlAsync","undefined","sourceMapUrl","constructSourceMapUrlAsync","assetsUrl","constructAssetsUrlAsync","iosBundle","_getForPlatformAsync","errorCode","minLength","androidBundle","iosSourceMap","androidSourceMap","iosAssetsJson","androidAssetsJson","assets","JSON","parse","url","fullUrl","response","axios","request","responseType","transformResponse","proxy","validateStatus","status","headers","error","body","logError","message","XDLError"],"sources":["../../src/project/createBundlesAsync.ts"],"sourcesContent":["import { getConfig, Platform } from '@expo/config';\nimport { bundleAsync, BundleOutput } from '@expo/dev-server';\nimport axios from 'axios';\nimport chalk from 'chalk';\n\nimport {\n ErrorCode,\n learnMore,\n Logger as logger,\n ProjectUtils,\n PublishOptions,\n resolveEntryPoint,\n startReactNativeServerAsync,\n stopReactNativeServerAsync,\n TableText,\n UrlUtils,\n XDLError,\n} from '../internal';\n\nconst MINIMUM_BUNDLE_SIZE = 500;\n\ntype PackagerOptions = {\n dev: boolean;\n minify: boolean;\n};\n\nexport function printBundleSizes(bundles: { android?: BundleOutput; ios?: BundleOutput }) {\n const files: [string, string | Uint8Array][] = [];\n\n if (bundles.ios?.hermesBytecodeBundle) {\n files.push(['index.ios.js (Hermes)', bundles.ios.hermesBytecodeBundle]);\n } else if (bundles.ios?.code) {\n files.push(['index.ios.js', bundles.ios.code]);\n }\n if (bundles.android?.hermesBytecodeBundle) {\n files.push(['index.android.js (Hermes)', bundles.android.hermesBytecodeBundle]);\n } else if (bundles.android?.code) {\n files.push(['index.android.js', bundles.android.code]);\n }\n\n // Account for inline source maps\n if (bundles.ios?.hermesSourcemap) {\n files.push([chalk.dim('index.ios.js.map (Hermes)'), bundles.ios.hermesSourcemap]);\n } else if (bundles.ios?.map) {\n files.push([chalk.dim('index.ios.js.map'), bundles.ios.map]);\n }\n if (bundles.android?.hermesSourcemap) {\n files.push([chalk.dim('index.android.js.map (Hermes)'), bundles.android.hermesSourcemap]);\n } else if (bundles.android?.map) {\n files.push([chalk.dim('index.android.js.map'), bundles.android.map]);\n }\n\n logger.global.info('');\n logger.global.info(TableText.createFilesTable(files));\n logger.global.info('');\n logger.global.info(\n `💡 JavaScript bundle sizes affect startup time. ${chalk.dim(\n learnMore(`https://expo.fyi/javascript-bundle-sizes`)\n )}`\n );\n logger.global.info('');\n}\n\nexport async function createBundlesAsync(\n projectRoot: string,\n publishOptions: PublishOptions = {},\n bundleOptions: { platforms: Platform[]; dev?: boolean; useDevServer: boolean }\n): Promise<Partial<Record<Platform, BundleOutput>>> {\n if (!bundleOptions.useDevServer) {\n // The old approach is so unstable / untested that we should warn users going forward to upgrade their projects.\n logger.global.warn(\n 'Using legacy Metro server to bundle your JavaScript code, you may encounter unexpected behavior if your project uses a custom metro.config.js file.'\n );\n // Dev server is aggressively enabled, so we can have a specific warning message:\n // - If the SDK version is UNVERSIONED or undefined, it'll be enabled.\n // - If EXPO_USE_DEV_SERVER is 0, or unset, it'll be enabled.\n logger.global.warn(\n `Please upgrade your project to Expo SDK 40+. If you experience CLI issues after upgrading, try using the env var EXPO_USE_DEV_SERVER=1.`\n );\n\n try {\n await startReactNativeServerAsync({\n projectRoot,\n options: {\n nonPersistent: true,\n maxWorkers: publishOptions.maxWorkers,\n target: publishOptions.target,\n reset: publishOptions.resetCache,\n },\n verbose: !publishOptions.quiet,\n });\n return await fetchPublishBundlesAsync(projectRoot);\n } finally {\n await stopReactNativeServerAsync(projectRoot);\n }\n }\n\n const config = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n const bundles = await bundleAsync(\n projectRoot,\n config.exp,\n {\n resetCache: publishOptions.resetCache,\n maxWorkers: publishOptions.maxWorkers,\n logger: ProjectUtils.getLogger(projectRoot),\n quiet: publishOptions.quiet,\n unversioned: !config.exp.sdkVersion || config.exp.sdkVersion === 'UNVERSIONED',\n },\n bundleOptions.platforms.map((platform: Platform) => ({\n platform,\n entryPoint: resolveEntryPoint(projectRoot, platform),\n dev: bundleOptions.dev,\n }))\n );\n\n // { ios: bundle, android: bundle }\n const results: Record<string, BundleOutput> = {};\n\n for (let index = 0; index < bundleOptions.platforms.length; index++) {\n const platform = bundleOptions.platforms[index];\n const bundle = bundles[index];\n results[platform] = bundle;\n }\n\n return results;\n}\n\n// Fetch iOS and Android bundles for publishing\nasync function fetchPublishBundlesAsync(projectRoot: string, opts?: PackagerOptions) {\n const entryPoint = resolveEntryPoint(projectRoot);\n const publishUrl = await UrlUtils.constructPublishUrlAsync(\n projectRoot,\n entryPoint,\n undefined,\n opts\n );\n const sourceMapUrl = await UrlUtils.constructSourceMapUrlAsync(projectRoot, entryPoint);\n const assetsUrl = await UrlUtils.constructAssetsUrlAsync(projectRoot, entryPoint);\n\n logger.global.info('Building iOS bundle');\n const iosBundle = await _getForPlatformAsync(projectRoot, publishUrl, 'ios', {\n errorCode: 'INVALID_BUNDLE',\n minLength: MINIMUM_BUNDLE_SIZE,\n });\n\n logger.global.info('Building Android bundle');\n const androidBundle = await _getForPlatformAsync(projectRoot, publishUrl, 'android', {\n errorCode: 'INVALID_BUNDLE',\n minLength: MINIMUM_BUNDLE_SIZE,\n });\n\n logger.global.info('Building source maps');\n const iosSourceMap = await _getForPlatformAsync(projectRoot, sourceMapUrl, 'ios', {\n errorCode: 'INVALID_BUNDLE',\n minLength: MINIMUM_BUNDLE_SIZE,\n });\n const androidSourceMap = await _getForPlatformAsync(projectRoot, sourceMapUrl, 'android', {\n errorCode: 'INVALID_BUNDLE',\n minLength: MINIMUM_BUNDLE_SIZE,\n });\n\n logger.global.info('Building asset maps');\n const iosAssetsJson = await _getForPlatformAsync(projectRoot, assetsUrl, 'ios', {\n errorCode: 'INVALID_ASSETS',\n });\n const androidAssetsJson = await _getForPlatformAsync(projectRoot, assetsUrl, 'android', {\n errorCode: 'INVALID_ASSETS',\n });\n\n return {\n android: { code: androidBundle, map: androidSourceMap, assets: JSON.parse(androidAssetsJson) },\n ios: { code: iosBundle, map: iosSourceMap, assets: JSON.parse(iosAssetsJson) },\n };\n}\n\nasync function _getForPlatformAsync(\n projectRoot: string,\n url: string,\n platform: Platform,\n { errorCode, minLength }: { errorCode: ErrorCode; minLength?: number }\n): Promise<string> {\n const fullUrl = `${url}&platform=${platform}`;\n let response;\n\n try {\n response = await axios.request({\n url: fullUrl,\n responseType: 'text',\n // Workaround for https://github.com/axios/axios/issues/907.\n // Without transformResponse, axios will parse the body as JSON regardless of the responseType/\n transformResponse: [data => data],\n proxy: false,\n validateStatus: status => status === 200,\n headers: {\n 'Exponent-Platform': platform,\n },\n });\n } catch (error: any) {\n if (error.response) {\n if (error.response.data) {\n let body;\n try {\n body = JSON.parse(error.response.data);\n } catch {\n ProjectUtils.logError(projectRoot, 'expo', error.response.data);\n }\n\n if (body) {\n if (body.message) {\n ProjectUtils.logError(projectRoot, 'expo', body.message);\n } else {\n ProjectUtils.logError(projectRoot, 'expo', error.response.data);\n }\n }\n }\n throw new XDLError(\n errorCode,\n `Packager URL ${fullUrl} returned unexpected code ${error.response.status}. ` +\n 'Please open your project in the Expo app and see if there are any errors. ' +\n 'Also scroll up and make sure there were no errors or warnings when opening your project.'\n );\n } else {\n throw error;\n }\n }\n\n if (!response.data || (minLength && response.data.length < minLength)) {\n throw new XDLError(errorCode, `Body is: ${response.data}`);\n }\n\n return response.data;\n}\n"],"mappings":"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"}