UNPKG

xdl

Version:
1 lines 23.6 kB
{"version":3,"file":"startLegacyReactNativeServerAsync.js","names":["_config","data","require","_paths","_axios","_interopRequireDefault","_child_process","_escapeRegExp","_path","_resolveFrom","_split","_treeKill","_util","_internal","obj","__esModule","default","treekillAsync","promisify","treekill","METRO_VERBOSE_WARNING","NODE_12_WINDOWS_METRO_ERROR","NODE_12_WINDOWS_METRO_SUGGESTION","_logPackagerOutput","projectRoot","level","output","toString","_isIgnorableDuplicateModuleWarning","ProjectUtils","logDebug","_isIgnorableMetroConsoleOutput","_isIgnorableRnpmWarning","includes","logError","replace","test","logInfo","startsWith","reactNativeNodeModulesPath","path","join","reactNativeNodeModulesPattern","escapeRegExp","reactNativeNodeModulesCollisionRegex","RegExp","startReactNativeServerAsync","options","exp","getConfig","verbose","assertValidProjectRoot","stopReactNativeServerAsync","Watchman","addToPathAsync","unblockAndGetVersionAsync","packagerPort","getFreePortAsync","metroPort","customLogReporterPath","resolve","__dirname","sourceExtsConfig","isTS","isReact","isModern","sourceExts","target","getBareExtensions","getManagedExtensions","packagerOpts","port","nonPersistent","Versions","gteSdkVersion","lteSdkVersion","assetPlugins","resolveFrom","silent","Error","maxWorkers","userPackagerOpts","_userPackagerOpts$sou","config","userSourceExts","Set","undefined","cliOpts","key","val","Object","entries","push","process","env","EXPO_DEBUG","reset","cliPath","packagerProcess","child_process","fork","cwd","NODE_OPTIONS","METRO_NODE_OPTIONS","REACT_NATIVE_APP_ROOT","ELECTRON_RUN_AS_NODE","ProjectSettings","setPackagerInfoAsync","packagerPid","pid","on","stdout","stderr","setEncoding","pipe","split","exitPromise","Promise","reject","once","code","packagerUrl","UrlUtils","constructBundleUrlAsync","urlType","hostType","race","_waitForRunningAsync","packagerInfo","readPackagerInfoAsync","e","url","retries","response","axios","request","responseType","proxy","message","delayAsync"],"sources":["../../src/start/startLegacyReactNativeServerAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { getBareExtensions, getManagedExtensions } from '@expo/config/paths';\nimport axios from 'axios';\nimport child_process from 'child_process';\nimport escapeRegExp from 'lodash/escapeRegExp';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport split from 'split';\nimport treekill from 'tree-kill';\nimport { promisify } from 'util';\n\nimport {\n assertValidProjectRoot,\n delayAsync,\n getFreePortAsync,\n ProjectSettings,\n ProjectUtils,\n StartDevServerOptions,\n UrlUtils,\n Versions,\n Watchman,\n} from '../internal';\n\nconst treekillAsync = promisify<number, string>(treekill);\n\n// The --verbose flag is intended for react-native-cli/metro, not expo-cli\nconst METRO_VERBOSE_WARNING = 'Run CLI with --verbose flag for more details.';\n\n// Remove these constants and related code when SDK35 isn't supported anymore\n// Context: https://github.com/expo/expo-cli/issues/1074\nconst NODE_12_WINDOWS_METRO_ERROR = `Invalid regular expression: /(.*\\\\__fixtures__\\\\.*|node_modules[\\\\]react[\\\\]dist[\\\\].*|website\\\\node_modules\\\\.*|heapCapture\\\\bundle.js|.*\\\\__tests__\\\\.*)$/: Unterminated character class`;\nconst NODE_12_WINDOWS_METRO_SUGGESTION = `\\nUnable to start the project due to a documented incompatibility between Node 12 LTS and Expo SDK 35 on Windows.\nPlease refer to this GitHub comment for a solution:\nhttps://github.com/expo/expo-cli/issues/1074#issuecomment-559220752\\n`;\n\nfunction _logPackagerOutput(projectRoot: string, level: string, data: object) {\n let output = data.toString();\n if (!output) {\n return;\n }\n // Temporarily hide warnings about duplicate providesModule declarations\n // under react-native\n if (_isIgnorableDuplicateModuleWarning(projectRoot, level, output)) {\n ProjectUtils.logDebug(\n projectRoot,\n 'expo',\n `Suppressing @providesModule warning: ${output}`,\n 'project-suppress-providesmodule-warning'\n );\n return;\n }\n if (_isIgnorableMetroConsoleOutput(output) || _isIgnorableRnpmWarning(output)) {\n ProjectUtils.logDebug(projectRoot, 'expo', output);\n return;\n }\n\n if (output.includes(NODE_12_WINDOWS_METRO_ERROR)) {\n ProjectUtils.logError(projectRoot, 'expo', NODE_12_WINDOWS_METRO_SUGGESTION);\n return;\n }\n\n if (output.includes(METRO_VERBOSE_WARNING)) {\n output = output.replace(METRO_VERBOSE_WARNING, '');\n }\n\n if (/^Scanning folders for symlinks in /.test(output)) {\n ProjectUtils.logDebug(projectRoot, 'metro', output);\n return;\n }\n if (level === 'info') {\n ProjectUtils.logInfo(projectRoot, 'metro', output);\n } else {\n ProjectUtils.logError(projectRoot, 'metro', output);\n }\n}\n\nfunction _isIgnorableMetroConsoleOutput(output: string) {\n // As of react-native 0.61.x, Metro prints console logs from the device to console, without\n // passing them through the custom log reporter.\n //\n // Managed apps have a separate remote logging implementation included in the Expo SDK,\n // (see: _handleDeviceLogs), so we can just ignore these device logs from Metro.\n // if (/^ () /)\n //\n // These logs originate from:\n // https://github.com/facebook/metro/blob/e8181fb9db7db31adf7d1ed9ab840f54449ef238/packages/metro/src/lib/logToConsole.js#L50\n return /^\\s+(INFO|WARN|LOG|GROUP|DEBUG) /.test(output);\n}\n\nfunction _isIgnorableRnpmWarning(output: string) {\n return output.startsWith(\n 'warn The following packages use deprecated \"rnpm\" config that will stop working from next release'\n );\n}\n\nfunction _isIgnorableDuplicateModuleWarning(\n projectRoot: string,\n level: string,\n output: string\n): boolean {\n if (\n level !== 'error' ||\n !output.startsWith('jest-haste-map: @providesModule naming collision:')\n ) {\n return false;\n }\n\n const reactNativeNodeModulesPath = path.join(\n projectRoot,\n 'node_modules',\n 'react-native',\n 'node_modules'\n );\n const reactNativeNodeModulesPattern = escapeRegExp(reactNativeNodeModulesPath);\n const reactNativeNodeModulesCollisionRegex = new RegExp(\n `Paths: ${reactNativeNodeModulesPattern}.+ collides with ${reactNativeNodeModulesPattern}.+`\n );\n return reactNativeNodeModulesCollisionRegex.test(output);\n}\n\nexport async function startReactNativeServerAsync({\n projectRoot,\n options = {},\n exp = getConfig(projectRoot).exp,\n verbose = true,\n}: {\n projectRoot: string;\n options: StartDevServerOptions;\n exp?: ExpoConfig;\n verbose?: boolean;\n}): Promise<void> {\n assertValidProjectRoot(projectRoot);\n await stopReactNativeServerAsync(projectRoot);\n await Watchman.addToPathAsync(); // Attempt to fix watchman if it's hanging\n await Watchman.unblockAndGetVersionAsync(projectRoot);\n\n let packagerPort = await getFreePortAsync(options.metroPort || 19001); // Create packager options\n\n const customLogReporterPath: string = require.resolve(\n path.join(__dirname, '../../build/reporter')\n );\n\n // TODO: Bacon: Support .mjs (short-lived JS modules extension that some packages use)\n const sourceExtsConfig = { isTS: true, isReact: true, isModern: false };\n const sourceExts =\n options.target === 'bare'\n ? getBareExtensions([], sourceExtsConfig)\n : getManagedExtensions([], sourceExtsConfig);\n\n let packagerOpts: { [key: string]: any } = {\n port: packagerPort,\n customLogReporterPath,\n sourceExts,\n };\n\n if (options.nonPersistent && !Versions.gteSdkVersion(exp, '33.0.0')) {\n // Expo SDK -32 | React Native -57\n packagerOpts.nonPersistent = true;\n }\n\n if (!Versions.lteSdkVersion(exp, '32.0.0')) {\n // Expo SDK +33 | React Native +59.8 (hooks): Add asset plugins\n\n // starting with SDK 37, we bundle this plugin with the expo-asset package instead of expo,\n // so check there first and fall back to expo if we can't find it in expo-asset\n packagerOpts.assetPlugins = resolveFrom.silent(projectRoot, 'expo-asset/tools/hashAssetFiles');\n if (!packagerOpts.assetPlugins) {\n packagerOpts.assetPlugins = resolveFrom.silent(projectRoot, 'expo/tools/hashAssetFiles');\n if (!packagerOpts.assetPlugins) {\n throw new Error(\n 'Unable to find the expo-asset package in the current project. Install it and try again.'\n );\n }\n }\n }\n\n if (options.maxWorkers) {\n packagerOpts['max-workers'] = options.maxWorkers;\n }\n\n if (Versions.lteSdkVersion(exp, '15.0.0')) {\n // Expo SDK -15 | React Native -42: customLogReporterPath is not supported\n delete packagerOpts.customLogReporterPath;\n }\n const userPackagerOpts = exp.packagerOpts;\n\n if (userPackagerOpts) {\n // The RN CLI expects rn-cli.config.js's path to be absolute. We use the\n // project root to resolve relative paths since that was the original\n // behavior of the RN CLI.\n if (userPackagerOpts.config) {\n userPackagerOpts.config = path.resolve(projectRoot, userPackagerOpts.config);\n }\n\n // Provide a fallback if the value isn't given\n const userSourceExts = userPackagerOpts.sourceExts ?? [];\n\n packagerOpts = {\n ...packagerOpts,\n ...userPackagerOpts,\n // In order to prevent people from forgetting to include the .expo extension or other things\n // NOTE(brentvatne): we should probably do away with packagerOpts soon in favor of @expo/metro-config!\n sourceExts: [...new Set([...packagerOpts.sourceExts, ...userSourceExts])],\n };\n\n if (userPackagerOpts.port !== undefined && userPackagerOpts.port !== null) {\n packagerPort = userPackagerOpts.port;\n }\n }\n const cliOpts = ['start'];\n for (const [key, val] of Object.entries(packagerOpts)) {\n // If the packager opt value is boolean, don't set\n // --[opt] [value], just set '--opt'\n if (val && typeof val === 'boolean') {\n cliOpts.push(`--${key}`);\n } else if (val) {\n cliOpts.push(`--${key}`, val);\n }\n }\n\n if (process.env.EXPO_DEBUG) {\n cliOpts.push('--verbose');\n }\n\n if (options.reset) {\n cliOpts.push('--reset-cache');\n }\n\n // Get the CLI path\n const cliPath = resolveFrom(projectRoot, 'react-native/local-cli/cli.js');\n\n // Run the copy of Node that's embedded in Electron by setting the\n // ELECTRON_RUN_AS_NODE environment variable\n // Note: the CLI script sets up graceful-fs and sets ulimit to 4096 in the\n // child process\n const packagerProcess = child_process.fork(cliPath, cliOpts, {\n cwd: projectRoot,\n env: {\n ...process.env,\n NODE_OPTIONS: process.env.METRO_NODE_OPTIONS,\n REACT_NATIVE_APP_ROOT: projectRoot,\n ELECTRON_RUN_AS_NODE: '1',\n },\n silent: true,\n });\n await ProjectSettings.setPackagerInfoAsync(projectRoot, {\n packagerPort,\n packagerPid: packagerProcess.pid,\n }); // TODO: do we need this? don't know if it's ever called\n process.on('exit', () => {\n treekill(packagerProcess.pid);\n });\n if (!packagerProcess.stdout) {\n throw new Error('Expected spawned process to have a stdout stream, but none was found.');\n }\n if (!packagerProcess.stderr) {\n throw new Error('Expected spawned process to have a stderr stream, but none was found.');\n }\n packagerProcess.stdout.setEncoding('utf8');\n packagerProcess.stderr.setEncoding('utf8');\n packagerProcess.stdout.pipe(split()).on('data', data => {\n if (verbose) {\n _logPackagerOutput(projectRoot, 'info', data);\n }\n });\n packagerProcess.stderr.on('data', data => {\n if (verbose) {\n _logPackagerOutput(projectRoot, 'error', data);\n }\n });\n const exitPromise = new Promise<void>((resolve, reject) => {\n packagerProcess.once('exit', async code => {\n ProjectUtils.logDebug(projectRoot, 'expo', `Metro Bundler process exited with code ${code}`);\n if (code) {\n reject(new Error(`Metro Bundler process exited with code ${code}`));\n } else {\n resolve();\n }\n try {\n await ProjectSettings.setPackagerInfoAsync(projectRoot, {\n packagerPort: null,\n packagerPid: null,\n });\n } catch {}\n });\n });\n const packagerUrl = await UrlUtils.constructBundleUrlAsync(projectRoot, {\n urlType: 'http',\n hostType: 'localhost',\n });\n await Promise.race([_waitForRunningAsync(projectRoot, `${packagerUrl}/status`), exitPromise]);\n}\n\nexport async function stopReactNativeServerAsync(projectRoot: string): Promise<void> {\n assertValidProjectRoot(projectRoot);\n const packagerInfo = await ProjectSettings.readPackagerInfoAsync(projectRoot);\n if (!packagerInfo.packagerPort || !packagerInfo.packagerPid) {\n ProjectUtils.logDebug(projectRoot, 'expo', `No packager found for project at ${projectRoot}.`);\n return;\n }\n ProjectUtils.logDebug(\n projectRoot,\n 'expo',\n `Killing packager process tree: ${packagerInfo.packagerPid}`\n );\n try {\n await treekillAsync(packagerInfo.packagerPid, 'SIGKILL');\n } catch (e: any) {\n ProjectUtils.logDebug(projectRoot, 'expo', `Error stopping packager process: ${e.toString()}`);\n }\n await ProjectSettings.setPackagerInfoAsync(projectRoot, {\n packagerPort: null,\n packagerPid: null,\n });\n}\n\nasync function _waitForRunningAsync(\n projectRoot: string,\n url: string,\n retries: number = 300\n): Promise<true> {\n try {\n const response = await axios.request({\n url,\n responseType: 'text',\n proxy: false,\n });\n if (/packager-status:running/.test(response.data)) {\n return true;\n } else if (retries === 0) {\n ProjectUtils.logError(\n projectRoot,\n 'expo',\n `Could not get status from Metro bundler. Server response: ${response.data}`\n );\n }\n } catch (e: any) {\n if (retries === 0) {\n ProjectUtils.logError(\n projectRoot,\n 'expo',\n `Could not get status from Metro bundler. ${e.message}`\n );\n }\n }\n\n if (retries <= 0) {\n throw new Error('Connecting to Metro bundler failed.');\n } else {\n await delayAsync(100);\n return _waitForRunningAsync(projectRoot, url, retries - 1);\n }\n}\n"],"mappings":"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"}