@expo/cli 0.18.8 → 0.18.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/build/bin/cli +1 -1
  2. package/build/src/run/ios/appleDevice/AppleDevice.js +2 -2
  3. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  4. package/build/src/run/startBundler.js +7 -0
  5. package/build/src/run/startBundler.js.map +1 -1
  6. package/build/src/start/interface/interactiveActions.js +7 -0
  7. package/build/src/start/interface/interactiveActions.js.map +1 -1
  8. package/build/src/start/server/getStaticRenderFunctions.js +1 -1
  9. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  10. package/build/src/start/startAsync.js +7 -0
  11. package/build/src/start/startAsync.js.map +1 -1
  12. package/build/src/utils/env.js +3 -0
  13. package/build/src/utils/env.js.map +1 -1
  14. package/build/src/utils/telemetry/getContext.js +1 -1
  15. package/package.json +5 -2
  16. package/static/canary/react-is/cjs/react-is.development.js +200 -0
  17. package/static/canary/react-is/cjs/react-is.production.js +130 -0
  18. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +22899 -24003
  19. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +5190 -4270
  20. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-profiling.js +5206 -4094
  21. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +23165 -24313
  22. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5298 -4377
  23. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +11347 -0
  24. package/static/canary/scheduler/cjs/scheduler-unstable_mock.development.js +711 -0
  25. package/static/canary/scheduler/cjs/scheduler-unstable_mock.production.js +415 -0
  26. package/static/canary/scheduler/cjs/scheduler-unstable_post_task.development.js +208 -0
  27. package/static/canary/scheduler/cjs/scheduler-unstable_post_task.production.js +145 -0
  28. package/static/canary/scheduler/cjs/scheduler.development.js +625 -0
  29. package/static/canary/scheduler/cjs/scheduler.native.development.js +538 -0
  30. package/static/canary/scheduler/cjs/scheduler.native.production.js +329 -0
  31. package/static/canary/scheduler/cjs/scheduler.production.js +341 -0
package/build/bin/cli CHANGED
@@ -120,7 +120,7 @@ const args = (0, _arg().default)({
120
120
  });
121
121
  if (args["--version"]) {
122
122
  // Version is added in the build script.
123
- console.log("0.18.8");
123
+ console.log("0.18.10");
124
124
  process.exit(0);
125
125
  }
126
126
  if (args["--non-interactive"]) {
@@ -91,9 +91,9 @@ function _interopRequireWildcard(obj, nodeInterop) {
91
91
  }
92
92
  const debug = (0, _debug().default)("expo:apple-device");
93
93
  async function getConnectedDevicesUsingNativeToolsAsync() {
94
- return (await _devicectl.getConnectedAppleDevicesAsync())// Filter out unpaired devices.
94
+ return (await _devicectl.getConnectedAppleDevicesAsync())// Filter out unpaired and unavailable devices.
95
95
  // TODO: We could improve this logic in the future to attempt pairing if specified.
96
- .filter((device)=>device.connectionProperties.pairingState === "paired").map((device)=>{
96
+ .filter((device)=>device.connectionProperties.pairingState === "paired" && device.connectionProperties.tunnelState !== "unavailable").map((device)=>{
97
97
  return {
98
98
  name: device.deviceProperties.name,
99
99
  model: device.hardwareProperties.productType,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/run/ios/appleDevice/AppleDevice.ts"],"sourcesContent":["import Debug from 'debug';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { ClientManager } from './ClientManager';\nimport { IPLookupResult, OnInstallProgressCallback } from './client/InstallationProxyClient';\nimport { LockdowndClient } from './client/LockdowndClient';\nimport { UsbmuxdClient } from './client/UsbmuxdClient';\nimport { AFC_STATUS, AFCError } from './protocol/AFCProtocol';\nimport { Log } from '../../../log';\nimport { XcodeDeveloperDiskImagePrerequisite } from '../../../start/doctor/apple/XcodeDeveloperDiskImagePrerequisite';\nimport * as devicectl from '../../../start/platforms/ios/devicectl';\nimport { launchAppWithDeviceCtl } from '../../../start/platforms/ios/devicectl';\nimport { OSType } from '../../../start/platforms/ios/simctl';\nimport { uniqBy } from '../../../utils/array';\nimport { delayAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\nimport { profile } from '../../../utils/profile';\n\nconst debug = Debug('expo:apple-device');\n\n// NOTE(EvanBacon): I have a feeling this shape will change with new iOS versions (tested against iOS 15).\nexport interface ConnectedDevice {\n /** @example `00008101-001964A22629003A` */\n udid: string;\n /** @example `Evan's phone` */\n name: string;\n /** @example `iPhone13,4` */\n model: string;\n /** @example `device` */\n deviceType: 'device' | 'catalyst';\n /** @example `USB` */\n connectionType: 'USB' | 'Network';\n /** @example `15.4.1` */\n osVersion: string;\n\n osType: OSType;\n}\n\nasync function getConnectedDevicesUsingNativeToolsAsync(): Promise<ConnectedDevice[]> {\n return (\n (await devicectl.getConnectedAppleDevicesAsync())\n // Filter out unpaired devices.\n // TODO: We could improve this logic in the future to attempt pairing if specified.\n .filter((device) => device.connectionProperties.pairingState === 'paired')\n .map((device) => {\n return {\n name: device.deviceProperties.name,\n model: device.hardwareProperties.productType,\n osVersion: device.deviceProperties.osVersionNumber,\n udid: device.hardwareProperties.udid,\n deviceType: 'device',\n connectionType:\n device.connectionProperties.transportType === 'localNetwork' ? 'Network' : 'USB',\n osType: coercePlatformToOsType(device.hardwareProperties.platform),\n };\n })\n );\n}\n\nfunction coercePlatformToOsType(platform: string): OSType {\n // The only two devices I have to test against...\n switch (platform) {\n case 'iOS':\n return 'iOS';\n case 'xrOS':\n return 'xrOS';\n default:\n debug('Unknown devicectl platform (needs to be added to Expo CLI):', platform);\n return platform as OSType;\n }\n}\nfunction coerceUsbmuxdPlatformToOsType(platform: string): OSType {\n // The only connectable device I have to test against...\n switch (platform) {\n case 'iPhone OS':\n return 'iOS';\n default:\n debug('Unknown usbmuxd platform (needs to be added to Expo CLI):', platform);\n return platform as OSType;\n }\n}\n\n/** @returns a list of connected Apple devices. */\nexport async function getConnectedDevicesAsync(): Promise<ConnectedDevice[]> {\n const devices = await Promise.all([\n // Prioritize native tools since they can provide more accurate information.\n // NOTE: xcrun is substantially slower than custom tooling. +1.5s vs 9ms.\n profile(getConnectedDevicesUsingNativeToolsAsync)(),\n profile(getConnectedDevicesUsingCustomToolingAsync)(),\n ]);\n\n return uniqBy(devices.flat(), (device) => device.udid);\n}\n\n/**\n * This supports devices that are running OS versions older than iOS 17.\n *\n * @returns a list of connected Apple devices.\n */\nasync function getConnectedDevicesUsingCustomToolingAsync(): Promise<ConnectedDevice[]> {\n const client = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n const devices = await client.getDevices();\n client.socket.end();\n\n return Promise.all(\n devices.map(async (device): Promise<ConnectedDevice> => {\n const socket = await new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket()).connect(\n device,\n 62078\n );\n const deviceValues = await new LockdowndClient(socket).getAllValues();\n socket.end();\n // TODO(EvanBacon): Add support for osType (ipad, watchos, etc)\n return {\n // TODO(EvanBacon): Better name\n name: deviceValues.DeviceName ?? deviceValues.ProductType ?? 'unknown iOS device',\n model: deviceValues.ProductType,\n osVersion: deviceValues.ProductVersion,\n deviceType: 'device',\n connectionType: device.Properties.ConnectionType,\n udid: device.Properties.SerialNumber,\n osType: coerceUsbmuxdPlatformToOsType(deviceValues.DeviceClass),\n };\n })\n );\n}\n\n/** Install and run an Apple app binary on a connected Apple device. */\nexport async function runOnDevice({\n udid,\n appPath,\n bundleId,\n waitForApp,\n deltaPath,\n onProgress,\n}: {\n /** Apple device UDID */\n udid: string;\n /** File path to the app binary (ipa) */\n appPath: string;\n /** Bundle identifier for the app at `appPath` */\n bundleId: string;\n /** Wait for the app to launch before returning */\n waitForApp: boolean;\n /** File path to the app deltas folder to use for faster subsequent installs */\n deltaPath: string;\n /** Callback to be called with progress updates */\n onProgress: OnInstallProgressCallback;\n}) {\n debug('Running on device:', { udid, appPath, bundleId, waitForApp, deltaPath });\n\n const clientManager = await ClientManager.create(udid);\n\n try {\n await mountDeveloperDiskImage(clientManager);\n\n const packageName = path.basename(appPath);\n const destPackagePath = path.join('PublicStaging', packageName);\n\n await uploadApp(clientManager, { appBinaryPath: appPath, destinationPath: destPackagePath });\n\n const installer = await clientManager.getInstallationProxyClient();\n await installer.installApp(\n destPackagePath,\n bundleId,\n {\n // https://github.com/ios-control/ios-deploy/blob/0f2ffb1e564aa67a2dfca7cdf13de47ce489d835/src/ios-deploy/ios-deploy.m#L2491-L2508\n ApplicationsType: 'Any',\n\n CFBundleIdentifier: bundleId,\n CloseOnInvalidate: '1',\n InvalidateOnDetach: '1',\n IsUserInitiated: '1',\n // Disable checking for wifi devices, this is nominally faster.\n PreferWifi: '0',\n // Only info I could find on these:\n // https://github.com/wwxxyx/Quectel_BG96/blob/310876f90fc1093a59e45e381160eddcc31697d0/Apple_Homekit/homekit_certification_tools/ATS%206/ATS%206/ATS.app/Contents/Frameworks/CaptureKit.framework/Versions/A/Resources/MobileDevice/MobileInstallation.h#L112-L121\n PackageType: 'Developer',\n ShadowParentKey: deltaPath,\n // SkipUninstall: '1'\n },\n onProgress\n );\n\n const {\n // TODO(EvanBacon): This can be undefined when querying App Clips.\n [bundleId]: appInfo,\n } = await installer.lookupApp([bundleId]);\n\n if (appInfo) {\n // launch fails with EBusy or ENotFound if you try to launch immediately after install\n await delayAsync(200);\n const debugServerClient = await launchApp(clientManager, {\n bundleId,\n appInfo,\n detach: !waitForApp,\n });\n\n if (waitForApp && debugServerClient) {\n installExitHooks(async () => {\n // causes continue() to return\n debugServerClient.halt();\n // give continue() time to return response\n await delayAsync(64);\n });\n\n debug(`Waiting for app to close...\\n`);\n const result = await debugServerClient.continue();\n // TODO: I have no idea what this packet means yet (successful close?)\n // if not a close (ie, most likely due to halt from onBeforeExit), then kill the app\n if (result !== 'W00') {\n await debugServerClient.kill();\n }\n }\n } else {\n Log.warn(`App \"${bundleId}\" installed but couldn't be launched. Open on device manually.`);\n }\n } finally {\n clientManager.end();\n }\n}\n\n/** Mount the developer disk image for Xcode. */\nasync function mountDeveloperDiskImage(clientManager: ClientManager) {\n const imageMounter = await clientManager.getMobileImageMounterClient();\n // Check if already mounted. If not, mount.\n if (!(await imageMounter.lookupImage()).ImageSignature) {\n // verify DeveloperDiskImage exists (TODO: how does this work on Windows/Linux?)\n // TODO: if windows/linux, download?\n const version = await (await clientManager.getLockdowndClient()).getValue('ProductVersion');\n const developerDiskImagePath = await XcodeDeveloperDiskImagePrerequisite.instance.assertAsync({\n version,\n });\n const developerDiskImageSig = fs.readFileSync(`${developerDiskImagePath}.signature`);\n await imageMounter.uploadImage(developerDiskImagePath, developerDiskImageSig);\n await imageMounter.mountImage(developerDiskImagePath, developerDiskImageSig);\n }\n}\n\nasync function uploadApp(\n clientManager: ClientManager,\n { appBinaryPath, destinationPath }: { appBinaryPath: string; destinationPath: string }\n) {\n const afcClient = await clientManager.getAFCClient();\n try {\n await afcClient.getFileInfo('PublicStaging');\n } catch (err: any) {\n if (err instanceof AFCError && err.status === AFC_STATUS.OBJECT_NOT_FOUND) {\n await afcClient.makeDirectory('PublicStaging');\n } else {\n throw err;\n }\n }\n await afcClient.uploadDirectory(appBinaryPath, destinationPath);\n}\n\nasync function launchAppWithUsbmux(\n clientManager: ClientManager,\n { appInfo, detach }: { appInfo: IPLookupResult[string]; detach?: boolean }\n) {\n let tries = 0;\n while (tries < 3) {\n const debugServerClient = await clientManager.getDebugserverClient();\n await debugServerClient.setMaxPacketSize(1024);\n await debugServerClient.setWorkingDir(appInfo.Container);\n await debugServerClient.launchApp(appInfo.Path, appInfo.CFBundleExecutable);\n\n const result = await debugServerClient.checkLaunchSuccess();\n if (result === 'OK') {\n if (detach) {\n // https://github.com/libimobiledevice/libimobiledevice/blob/25059d4c7d75e03aab516af2929d7c6e6d4c17de/tools/idevicedebug.c#L455-L464\n const res = await debugServerClient.sendCommand('D', []);\n debug('Disconnect from debug server request:', res);\n if (res !== 'OK') {\n console.warn(\n 'Something went wrong while attempting to disconnect from iOS debug server, you may need to reopen the app manually.'\n );\n }\n }\n\n return debugServerClient;\n } else if (result === 'EBusy' || result === 'ENotFound') {\n debug('Device busy or app not found, trying to launch again in .5s...');\n tries++;\n debugServerClient.socket.end();\n await delayAsync(500);\n } else {\n throw new CommandError(`There was an error launching app: ${result}`);\n }\n }\n throw new CommandError('Unable to launch app, number of tries exceeded');\n}\n\n/**\n * iOS 17 introduces a new protocol called RemoteXPC.\n * This is not yet implemented, so we fallback to devicectl.\n *\n * @see https://github.com/doronz88/pymobiledevice3/blob/master/misc/RemoteXPC.md#process-remoted\n */\nasync function launchApp(\n clientManager: ClientManager,\n {\n bundleId,\n appInfo,\n detach,\n }: { bundleId: string; appInfo: IPLookupResult[string]; detach?: boolean }\n) {\n try {\n return await launchAppWithUsbmux(clientManager, { appInfo, detach });\n } catch (error) {\n debug('Failed to launch app with Usbmuxd, falling back to xcrun...', error);\n\n // Get the device UDID and close the connection, to allow `xcrun devicectl` to connect\n const deviceId = clientManager.device.Properties.SerialNumber;\n clientManager.end();\n\n // Fallback to devicectl for iOS 17 support\n return await launchAppWithDeviceCtl(deviceId, bundleId);\n }\n}\n"],"names":["getConnectedDevicesAsync","runOnDevice","debug","Debug","getConnectedDevicesUsingNativeToolsAsync","devicectl","getConnectedAppleDevicesAsync","filter","device","connectionProperties","pairingState","map","name","deviceProperties","model","hardwareProperties","productType","osVersion","osVersionNumber","udid","deviceType","connectionType","transportType","osType","coercePlatformToOsType","platform","coerceUsbmuxdPlatformToOsType","devices","Promise","all","profile","getConnectedDevicesUsingCustomToolingAsync","uniqBy","flat","client","UsbmuxdClient","connectUsbmuxdSocket","getDevices","socket","end","connect","deviceValues","LockdowndClient","getAllValues","DeviceName","ProductType","ProductVersion","Properties","ConnectionType","SerialNumber","DeviceClass","appPath","bundleId","waitForApp","deltaPath","onProgress","clientManager","ClientManager","create","mountDeveloperDiskImage","packageName","path","basename","destPackagePath","join","uploadApp","appBinaryPath","destinationPath","installer","getInstallationProxyClient","installApp","ApplicationsType","CFBundleIdentifier","CloseOnInvalidate","InvalidateOnDetach","IsUserInitiated","PreferWifi","PackageType","ShadowParentKey","appInfo","lookupApp","delayAsync","debugServerClient","launchApp","detach","installExitHooks","halt","result","continue","kill","Log","warn","imageMounter","getMobileImageMounterClient","lookupImage","ImageSignature","version","getLockdowndClient","getValue","developerDiskImagePath","XcodeDeveloperDiskImagePrerequisite","instance","assertAsync","developerDiskImageSig","fs","readFileSync","uploadImage","mountImage","afcClient","getAFCClient","getFileInfo","err","AFCError","status","AFC_STATUS","OBJECT_NOT_FOUND","makeDirectory","uploadDirectory","launchAppWithUsbmux","tries","getDebugserverClient","setMaxPacketSize","setWorkingDir","Container","Path","CFBundleExecutable","checkLaunchSuccess","res","sendCommand","console","CommandError","error","deviceId","launchAppWithDeviceCtl"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/run/ios/appleDevice/AppleDevice.ts"],"sourcesContent":["import Debug from 'debug';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { ClientManager } from './ClientManager';\nimport { IPLookupResult, OnInstallProgressCallback } from './client/InstallationProxyClient';\nimport { LockdowndClient } from './client/LockdowndClient';\nimport { UsbmuxdClient } from './client/UsbmuxdClient';\nimport { AFC_STATUS, AFCError } from './protocol/AFCProtocol';\nimport { Log } from '../../../log';\nimport { XcodeDeveloperDiskImagePrerequisite } from '../../../start/doctor/apple/XcodeDeveloperDiskImagePrerequisite';\nimport * as devicectl from '../../../start/platforms/ios/devicectl';\nimport { launchAppWithDeviceCtl } from '../../../start/platforms/ios/devicectl';\nimport { OSType } from '../../../start/platforms/ios/simctl';\nimport { uniqBy } from '../../../utils/array';\nimport { delayAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\nimport { profile } from '../../../utils/profile';\n\nconst debug = Debug('expo:apple-device');\n\n// NOTE(EvanBacon): I have a feeling this shape will change with new iOS versions (tested against iOS 15).\nexport interface ConnectedDevice {\n /** @example `00008101-001964A22629003A` */\n udid: string;\n /** @example `Evan's phone` */\n name: string;\n /** @example `iPhone13,4` */\n model: string;\n /** @example `device` */\n deviceType: 'device' | 'catalyst';\n /** @example `USB` */\n connectionType: 'USB' | 'Network';\n /** @example `15.4.1` */\n osVersion: string;\n\n osType: OSType;\n}\n\nasync function getConnectedDevicesUsingNativeToolsAsync(): Promise<ConnectedDevice[]> {\n return (\n (await devicectl.getConnectedAppleDevicesAsync())\n // Filter out unpaired and unavailable devices.\n // TODO: We could improve this logic in the future to attempt pairing if specified.\n .filter(\n (device) =>\n device.connectionProperties.pairingState === 'paired' &&\n device.connectionProperties.tunnelState !== 'unavailable'\n )\n .map((device) => {\n return {\n name: device.deviceProperties.name,\n model: device.hardwareProperties.productType,\n osVersion: device.deviceProperties.osVersionNumber,\n udid: device.hardwareProperties.udid,\n deviceType: 'device',\n connectionType:\n device.connectionProperties.transportType === 'localNetwork' ? 'Network' : 'USB',\n osType: coercePlatformToOsType(device.hardwareProperties.platform),\n };\n })\n );\n}\n\nfunction coercePlatformToOsType(platform: string): OSType {\n // The only two devices I have to test against...\n switch (platform) {\n case 'iOS':\n return 'iOS';\n case 'xrOS':\n return 'xrOS';\n default:\n debug('Unknown devicectl platform (needs to be added to Expo CLI):', platform);\n return platform as OSType;\n }\n}\nfunction coerceUsbmuxdPlatformToOsType(platform: string): OSType {\n // The only connectable device I have to test against...\n switch (platform) {\n case 'iPhone OS':\n return 'iOS';\n default:\n debug('Unknown usbmuxd platform (needs to be added to Expo CLI):', platform);\n return platform as OSType;\n }\n}\n\n/** @returns a list of connected Apple devices. */\nexport async function getConnectedDevicesAsync(): Promise<ConnectedDevice[]> {\n const devices = await Promise.all([\n // Prioritize native tools since they can provide more accurate information.\n // NOTE: xcrun is substantially slower than custom tooling. +1.5s vs 9ms.\n profile(getConnectedDevicesUsingNativeToolsAsync)(),\n profile(getConnectedDevicesUsingCustomToolingAsync)(),\n ]);\n\n return uniqBy(devices.flat(), (device) => device.udid);\n}\n\n/**\n * This supports devices that are running OS versions older than iOS 17.\n *\n * @returns a list of connected Apple devices.\n */\nasync function getConnectedDevicesUsingCustomToolingAsync(): Promise<ConnectedDevice[]> {\n const client = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n const devices = await client.getDevices();\n client.socket.end();\n\n return Promise.all(\n devices.map(async (device): Promise<ConnectedDevice> => {\n const socket = await new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket()).connect(\n device,\n 62078\n );\n const deviceValues = await new LockdowndClient(socket).getAllValues();\n socket.end();\n // TODO(EvanBacon): Add support for osType (ipad, watchos, etc)\n return {\n // TODO(EvanBacon): Better name\n name: deviceValues.DeviceName ?? deviceValues.ProductType ?? 'unknown iOS device',\n model: deviceValues.ProductType,\n osVersion: deviceValues.ProductVersion,\n deviceType: 'device',\n connectionType: device.Properties.ConnectionType,\n udid: device.Properties.SerialNumber,\n osType: coerceUsbmuxdPlatformToOsType(deviceValues.DeviceClass),\n };\n })\n );\n}\n\n/** Install and run an Apple app binary on a connected Apple device. */\nexport async function runOnDevice({\n udid,\n appPath,\n bundleId,\n waitForApp,\n deltaPath,\n onProgress,\n}: {\n /** Apple device UDID */\n udid: string;\n /** File path to the app binary (ipa) */\n appPath: string;\n /** Bundle identifier for the app at `appPath` */\n bundleId: string;\n /** Wait for the app to launch before returning */\n waitForApp: boolean;\n /** File path to the app deltas folder to use for faster subsequent installs */\n deltaPath: string;\n /** Callback to be called with progress updates */\n onProgress: OnInstallProgressCallback;\n}) {\n debug('Running on device:', { udid, appPath, bundleId, waitForApp, deltaPath });\n\n const clientManager = await ClientManager.create(udid);\n\n try {\n await mountDeveloperDiskImage(clientManager);\n\n const packageName = path.basename(appPath);\n const destPackagePath = path.join('PublicStaging', packageName);\n\n await uploadApp(clientManager, { appBinaryPath: appPath, destinationPath: destPackagePath });\n\n const installer = await clientManager.getInstallationProxyClient();\n await installer.installApp(\n destPackagePath,\n bundleId,\n {\n // https://github.com/ios-control/ios-deploy/blob/0f2ffb1e564aa67a2dfca7cdf13de47ce489d835/src/ios-deploy/ios-deploy.m#L2491-L2508\n ApplicationsType: 'Any',\n\n CFBundleIdentifier: bundleId,\n CloseOnInvalidate: '1',\n InvalidateOnDetach: '1',\n IsUserInitiated: '1',\n // Disable checking for wifi devices, this is nominally faster.\n PreferWifi: '0',\n // Only info I could find on these:\n // https://github.com/wwxxyx/Quectel_BG96/blob/310876f90fc1093a59e45e381160eddcc31697d0/Apple_Homekit/homekit_certification_tools/ATS%206/ATS%206/ATS.app/Contents/Frameworks/CaptureKit.framework/Versions/A/Resources/MobileDevice/MobileInstallation.h#L112-L121\n PackageType: 'Developer',\n ShadowParentKey: deltaPath,\n // SkipUninstall: '1'\n },\n onProgress\n );\n\n const {\n // TODO(EvanBacon): This can be undefined when querying App Clips.\n [bundleId]: appInfo,\n } = await installer.lookupApp([bundleId]);\n\n if (appInfo) {\n // launch fails with EBusy or ENotFound if you try to launch immediately after install\n await delayAsync(200);\n const debugServerClient = await launchApp(clientManager, {\n bundleId,\n appInfo,\n detach: !waitForApp,\n });\n\n if (waitForApp && debugServerClient) {\n installExitHooks(async () => {\n // causes continue() to return\n debugServerClient.halt();\n // give continue() time to return response\n await delayAsync(64);\n });\n\n debug(`Waiting for app to close...\\n`);\n const result = await debugServerClient.continue();\n // TODO: I have no idea what this packet means yet (successful close?)\n // if not a close (ie, most likely due to halt from onBeforeExit), then kill the app\n if (result !== 'W00') {\n await debugServerClient.kill();\n }\n }\n } else {\n Log.warn(`App \"${bundleId}\" installed but couldn't be launched. Open on device manually.`);\n }\n } finally {\n clientManager.end();\n }\n}\n\n/** Mount the developer disk image for Xcode. */\nasync function mountDeveloperDiskImage(clientManager: ClientManager) {\n const imageMounter = await clientManager.getMobileImageMounterClient();\n // Check if already mounted. If not, mount.\n if (!(await imageMounter.lookupImage()).ImageSignature) {\n // verify DeveloperDiskImage exists (TODO: how does this work on Windows/Linux?)\n // TODO: if windows/linux, download?\n const version = await (await clientManager.getLockdowndClient()).getValue('ProductVersion');\n const developerDiskImagePath = await XcodeDeveloperDiskImagePrerequisite.instance.assertAsync({\n version,\n });\n const developerDiskImageSig = fs.readFileSync(`${developerDiskImagePath}.signature`);\n await imageMounter.uploadImage(developerDiskImagePath, developerDiskImageSig);\n await imageMounter.mountImage(developerDiskImagePath, developerDiskImageSig);\n }\n}\n\nasync function uploadApp(\n clientManager: ClientManager,\n { appBinaryPath, destinationPath }: { appBinaryPath: string; destinationPath: string }\n) {\n const afcClient = await clientManager.getAFCClient();\n try {\n await afcClient.getFileInfo('PublicStaging');\n } catch (err: any) {\n if (err instanceof AFCError && err.status === AFC_STATUS.OBJECT_NOT_FOUND) {\n await afcClient.makeDirectory('PublicStaging');\n } else {\n throw err;\n }\n }\n await afcClient.uploadDirectory(appBinaryPath, destinationPath);\n}\n\nasync function launchAppWithUsbmux(\n clientManager: ClientManager,\n { appInfo, detach }: { appInfo: IPLookupResult[string]; detach?: boolean }\n) {\n let tries = 0;\n while (tries < 3) {\n const debugServerClient = await clientManager.getDebugserverClient();\n await debugServerClient.setMaxPacketSize(1024);\n await debugServerClient.setWorkingDir(appInfo.Container);\n await debugServerClient.launchApp(appInfo.Path, appInfo.CFBundleExecutable);\n\n const result = await debugServerClient.checkLaunchSuccess();\n if (result === 'OK') {\n if (detach) {\n // https://github.com/libimobiledevice/libimobiledevice/blob/25059d4c7d75e03aab516af2929d7c6e6d4c17de/tools/idevicedebug.c#L455-L464\n const res = await debugServerClient.sendCommand('D', []);\n debug('Disconnect from debug server request:', res);\n if (res !== 'OK') {\n console.warn(\n 'Something went wrong while attempting to disconnect from iOS debug server, you may need to reopen the app manually.'\n );\n }\n }\n\n return debugServerClient;\n } else if (result === 'EBusy' || result === 'ENotFound') {\n debug('Device busy or app not found, trying to launch again in .5s...');\n tries++;\n debugServerClient.socket.end();\n await delayAsync(500);\n } else {\n throw new CommandError(`There was an error launching app: ${result}`);\n }\n }\n throw new CommandError('Unable to launch app, number of tries exceeded');\n}\n\n/**\n * iOS 17 introduces a new protocol called RemoteXPC.\n * This is not yet implemented, so we fallback to devicectl.\n *\n * @see https://github.com/doronz88/pymobiledevice3/blob/master/misc/RemoteXPC.md#process-remoted\n */\nasync function launchApp(\n clientManager: ClientManager,\n {\n bundleId,\n appInfo,\n detach,\n }: { bundleId: string; appInfo: IPLookupResult[string]; detach?: boolean }\n) {\n try {\n return await launchAppWithUsbmux(clientManager, { appInfo, detach });\n } catch (error) {\n debug('Failed to launch app with Usbmuxd, falling back to xcrun...', error);\n\n // Get the device UDID and close the connection, to allow `xcrun devicectl` to connect\n const deviceId = clientManager.device.Properties.SerialNumber;\n clientManager.end();\n\n // Fallback to devicectl for iOS 17 support\n return await launchAppWithDeviceCtl(deviceId, bundleId);\n }\n}\n"],"names":["getConnectedDevicesAsync","runOnDevice","debug","Debug","getConnectedDevicesUsingNativeToolsAsync","devicectl","getConnectedAppleDevicesAsync","filter","device","connectionProperties","pairingState","tunnelState","map","name","deviceProperties","model","hardwareProperties","productType","osVersion","osVersionNumber","udid","deviceType","connectionType","transportType","osType","coercePlatformToOsType","platform","coerceUsbmuxdPlatformToOsType","devices","Promise","all","profile","getConnectedDevicesUsingCustomToolingAsync","uniqBy","flat","client","UsbmuxdClient","connectUsbmuxdSocket","getDevices","socket","end","connect","deviceValues","LockdowndClient","getAllValues","DeviceName","ProductType","ProductVersion","Properties","ConnectionType","SerialNumber","DeviceClass","appPath","bundleId","waitForApp","deltaPath","onProgress","clientManager","ClientManager","create","mountDeveloperDiskImage","packageName","path","basename","destPackagePath","join","uploadApp","appBinaryPath","destinationPath","installer","getInstallationProxyClient","installApp","ApplicationsType","CFBundleIdentifier","CloseOnInvalidate","InvalidateOnDetach","IsUserInitiated","PreferWifi","PackageType","ShadowParentKey","appInfo","lookupApp","delayAsync","debugServerClient","launchApp","detach","installExitHooks","halt","result","continue","kill","Log","warn","imageMounter","getMobileImageMounterClient","lookupImage","ImageSignature","version","getLockdowndClient","getValue","developerDiskImagePath","XcodeDeveloperDiskImagePrerequisite","instance","assertAsync","developerDiskImageSig","fs","readFileSync","uploadImage","mountImage","afcClient","getAFCClient","getFileInfo","err","AFCError","status","AFC_STATUS","OBJECT_NOT_FOUND","makeDirectory","uploadDirectory","launchAppWithUsbmux","tries","getDebugserverClient","setMaxPacketSize","setWorkingDir","Container","Path","CFBundleExecutable","checkLaunchSuccess","res","sendCommand","console","CommandError","error","deviceId","launchAppWithDeviceCtl"],"mappings":"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"}
@@ -23,6 +23,7 @@ function _chalk() {
23
23
  const _log = /*#__PURE__*/ _interopRequireWildcard(require("../log"));
24
24
  const _startInterface = require("../start/interface/startInterface");
25
25
  const _devServerManager = require("../start/server/DevServerManager");
26
+ const _env = require("../utils/env");
26
27
  const _interactive = require("../utils/interactive");
27
28
  function _interopRequireDefault(obj) {
28
29
  return obj && obj.__esModule ? obj : {
@@ -103,6 +104,12 @@ async function startBundlerAsync(projectRoot, { port , headless , scheme }) {
103
104
  // Display the server location in CI...
104
105
  const url = (ref = devServerManager.getDefaultDevServer()) == null ? void 0 : ref.getDevServerUrl();
105
106
  if (url) {
107
+ if (_env.env.__EXPO_E2E_TEST) {
108
+ // Print the URL to stdout for tests
109
+ console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({
110
+ url
111
+ })}`);
112
+ }
106
113
  _log.log((0, _chalk().default)`Waiting on {underline ${url}}`);
107
114
  }
108
115
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/run/startBundler.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { startInterfaceAsync } from '../start/interface/startInterface';\nimport { BundlerStartOptions } from '../start/server/BundlerDevServer';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { isInteractive } from '../utils/interactive';\n\nexport async function startBundlerAsync(\n projectRoot: string,\n {\n port,\n headless,\n scheme,\n }: {\n port: number;\n headless?: boolean;\n scheme?: string;\n }\n): Promise<DevServerManager> {\n const options: BundlerStartOptions = {\n port,\n headless,\n devClient: true,\n minify: false,\n\n location: {\n scheme,\n },\n };\n\n const devServerManager = new DevServerManager(projectRoot, options);\n\n await devServerManager.startAsync([\n {\n // TODO: Allow swapping this value for another bundler.\n type: 'metro',\n options,\n },\n ]);\n\n // Present the Terminal UI.\n if (!headless && isInteractive()) {\n // Only read the config if we are going to use the results.\n const { exp } = getConfig(projectRoot, {\n // We don't need very many fields here, just use the lightest possible read.\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n await startInterfaceAsync(devServerManager, {\n platforms: exp.platforms ?? [],\n });\n } else {\n // Display the server location in CI...\n const url = devServerManager.getDefaultDevServer()?.getDevServerUrl();\n if (url) {\n Log.log(chalk`Waiting on {underline ${url}}`);\n }\n }\n\n if (!options.headless) {\n await devServerManager.watchEnvironmentVariables();\n await devServerManager.bootstrapTypeScriptAsync();\n }\n\n return devServerManager;\n}\n"],"names":["startBundlerAsync","projectRoot","port","headless","scheme","options","devClient","minify","location","devServerManager","DevServerManager","startAsync","type","isInteractive","exp","getConfig","skipSDKVersionRequirement","skipPlugins","startInterfaceAsync","platforms","url","getDefaultDevServer","getDevServerUrl","Log","log","chalk","watchEnvironmentVariables","bootstrapTypeScriptAsync"],"mappings":"AAAA;;;;+BASsBA,mBAAiB;;aAAjBA,iBAAiB;;;yBATb,cAAc;;;;;;;8DACtB,OAAO;;;;;;2DAEJ,QAAQ;gCACO,mCAAmC;kCAEtC,kCAAkC;6BACrC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,eAAeA,iBAAiB,CACrCC,WAAmB,EACnB,EACEC,IAAI,CAAA,EACJC,QAAQ,CAAA,EACRC,MAAM,CAAA,EAKP,EAC0B;IAC3B,MAAMC,OAAO,GAAwB;QACnCH,IAAI;QACJC,QAAQ;QACRG,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,KAAK;QAEbC,QAAQ,EAAE;YACRJ,MAAM;SACP;KACF,AAAC;IAEF,MAAMK,gBAAgB,GAAG,IAAIC,iBAAgB,iBAAA,CAACT,WAAW,EAAEI,OAAO,CAAC,AAAC;IAEpE,MAAMI,gBAAgB,CAACE,UAAU,CAAC;QAChC;YACE,uDAAuD;YACvDC,IAAI,EAAE,OAAO;YACbP,OAAO;SACR;KACF,CAAC,CAAC;IAEH,2BAA2B;IAC3B,IAAI,CAACF,QAAQ,IAAIU,IAAAA,YAAa,cAAA,GAAE,EAAE;QAChC,2DAA2D;QAC3D,MAAM,EAAEC,GAAG,CAAA,EAAE,GAAGC,IAAAA,OAAS,EAAA,UAAA,EAACd,WAAW,EAAE;YACrC,4EAA4E;YAC5Ee,yBAAyB,EAAE,IAAI;YAC/BC,WAAW,EAAE,IAAI;SAClB,CAAC,AAAC;YAEUH,UAAa;QAD1B,MAAMI,IAAAA,eAAmB,oBAAA,EAACT,gBAAgB,EAAE;YAC1CU,SAAS,EAAEL,CAAAA,UAAa,GAAbA,GAAG,CAACK,SAAS,YAAbL,UAAa,GAAI,EAAE;SAC/B,CAAC,CAAC;IACL,OAAO;YAEOL,GAAsC;QADlD,uCAAuC;QACvC,MAAMW,GAAG,GAAGX,CAAAA,GAAsC,GAAtCA,gBAAgB,CAACY,mBAAmB,EAAE,SAAiB,GAAvDZ,KAAAA,CAAuD,GAAvDA,GAAsC,CAAEa,eAAe,EAAE,AAAC;QACtE,IAAIF,GAAG,EAAE;YACPG,IAAG,CAACC,GAAG,CAACC,IAAAA,MAAK,EAAA,QAAA,CAAA,CAAC,sBAAsB,EAAEL,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,CAACf,OAAO,CAACF,QAAQ,EAAE;QACrB,MAAMM,gBAAgB,CAACiB,yBAAyB,EAAE,CAAC;QACnD,MAAMjB,gBAAgB,CAACkB,wBAAwB,EAAE,CAAC;IACpD,CAAC;IAED,OAAOlB,gBAAgB,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"sources":["../../../src/run/startBundler.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { startInterfaceAsync } from '../start/interface/startInterface';\nimport { BundlerStartOptions } from '../start/server/BundlerDevServer';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { env } from '../utils/env';\nimport { isInteractive } from '../utils/interactive';\n\nexport async function startBundlerAsync(\n projectRoot: string,\n {\n port,\n headless,\n scheme,\n }: {\n port: number;\n headless?: boolean;\n scheme?: string;\n }\n): Promise<DevServerManager> {\n const options: BundlerStartOptions = {\n port,\n headless,\n devClient: true,\n minify: false,\n\n location: {\n scheme,\n },\n };\n\n const devServerManager = new DevServerManager(projectRoot, options);\n\n await devServerManager.startAsync([\n {\n // TODO: Allow swapping this value for another bundler.\n type: 'metro',\n options,\n },\n ]);\n\n // Present the Terminal UI.\n if (!headless && isInteractive()) {\n // Only read the config if we are going to use the results.\n const { exp } = getConfig(projectRoot, {\n // We don't need very many fields here, just use the lightest possible read.\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n await startInterfaceAsync(devServerManager, {\n platforms: exp.platforms ?? [],\n });\n } else {\n // Display the server location in CI...\n const url = devServerManager.getDefaultDevServer()?.getDevServerUrl();\n\n if (url) {\n if (env.__EXPO_E2E_TEST) {\n // Print the URL to stdout for tests\n console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({ url })}`);\n }\n Log.log(chalk`Waiting on {underline ${url}}`);\n }\n }\n\n if (!options.headless) {\n await devServerManager.watchEnvironmentVariables();\n await devServerManager.bootstrapTypeScriptAsync();\n }\n\n return devServerManager;\n}\n"],"names":["startBundlerAsync","projectRoot","port","headless","scheme","options","devClient","minify","location","devServerManager","DevServerManager","startAsync","type","isInteractive","exp","getConfig","skipSDKVersionRequirement","skipPlugins","startInterfaceAsync","platforms","url","getDefaultDevServer","getDevServerUrl","env","__EXPO_E2E_TEST","console","info","JSON","stringify","Log","log","chalk","watchEnvironmentVariables","bootstrapTypeScriptAsync"],"mappings":"AAAA;;;;+BAUsBA,mBAAiB;;aAAjBA,iBAAiB;;;yBAVb,cAAc;;;;;;;8DACtB,OAAO;;;;;;2DAEJ,QAAQ;gCACO,mCAAmC;kCAEtC,kCAAkC;qBAC/C,cAAc;6BACJ,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,eAAeA,iBAAiB,CACrCC,WAAmB,EACnB,EACEC,IAAI,CAAA,EACJC,QAAQ,CAAA,EACRC,MAAM,CAAA,EAKP,EAC0B;IAC3B,MAAMC,OAAO,GAAwB;QACnCH,IAAI;QACJC,QAAQ;QACRG,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,KAAK;QAEbC,QAAQ,EAAE;YACRJ,MAAM;SACP;KACF,AAAC;IAEF,MAAMK,gBAAgB,GAAG,IAAIC,iBAAgB,iBAAA,CAACT,WAAW,EAAEI,OAAO,CAAC,AAAC;IAEpE,MAAMI,gBAAgB,CAACE,UAAU,CAAC;QAChC;YACE,uDAAuD;YACvDC,IAAI,EAAE,OAAO;YACbP,OAAO;SACR;KACF,CAAC,CAAC;IAEH,2BAA2B;IAC3B,IAAI,CAACF,QAAQ,IAAIU,IAAAA,YAAa,cAAA,GAAE,EAAE;QAChC,2DAA2D;QAC3D,MAAM,EAAEC,GAAG,CAAA,EAAE,GAAGC,IAAAA,OAAS,EAAA,UAAA,EAACd,WAAW,EAAE;YACrC,4EAA4E;YAC5Ee,yBAAyB,EAAE,IAAI;YAC/BC,WAAW,EAAE,IAAI;SAClB,CAAC,AAAC;YAEUH,UAAa;QAD1B,MAAMI,IAAAA,eAAmB,oBAAA,EAACT,gBAAgB,EAAE;YAC1CU,SAAS,EAAEL,CAAAA,UAAa,GAAbA,GAAG,CAACK,SAAS,YAAbL,UAAa,GAAI,EAAE;SAC/B,CAAC,CAAC;IACL,OAAO;YAEOL,GAAsC;QADlD,uCAAuC;QACvC,MAAMW,GAAG,GAAGX,CAAAA,GAAsC,GAAtCA,gBAAgB,CAACY,mBAAmB,EAAE,SAAiB,GAAvDZ,KAAAA,CAAuD,GAAvDA,GAAsC,CAAEa,eAAe,EAAE,AAAC;QAEtE,IAAIF,GAAG,EAAE;YACP,IAAIG,IAAG,IAAA,CAACC,eAAe,EAAE;gBACvB,oCAAoC;gBACpCC,OAAO,CAACC,IAAI,CAAC,CAAC,yBAAyB,EAAEC,IAAI,CAACC,SAAS,CAAC;oBAAER,GAAG;iBAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC;YACDS,IAAG,CAACC,GAAG,CAACC,IAAAA,MAAK,EAAA,QAAA,CAAA,CAAC,sBAAsB,EAAEX,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,CAACf,OAAO,CAACF,QAAQ,EAAE;QACrB,MAAMM,gBAAgB,CAACuB,yBAAyB,EAAE,CAAC;QACnD,MAAMvB,gBAAgB,CAACwB,wBAAwB,EAAE,CAAC;IACpD,CAAC;IAED,OAAOxB,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -16,6 +16,7 @@ function _chalk() {
16
16
  const _commandsTable = require("./commandsTable");
17
17
  const _log = /*#__PURE__*/ _interopRequireWildcard(require("../../log"));
18
18
  const _delay = require("../../utils/delay");
19
+ const _env = require("../../utils/env");
19
20
  const _link = require("../../utils/link");
20
21
  const _open = require("../../utils/open");
21
22
  const _prompts = require("../../utils/prompts");
@@ -83,6 +84,12 @@ class DevServerManagerActions {
83
84
  if (interstitialPageUrl) {
84
85
  _log.log((0, _commandsTable.printItem)((0, _chalk().default)`Choose an app to open your project at {underline ${interstitialPageUrl}}`));
85
86
  }
87
+ if (_env.env.__EXPO_E2E_TEST) {
88
+ // Print the URL to stdout for tests
89
+ console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({
90
+ url: devServer.getDevServerUrl()
91
+ })}`);
92
+ }
86
93
  _log.log((0, _commandsTable.printItem)((0, _chalk().default)`Metro waiting on {underline ${nativeRuntimeUrl}}`));
87
94
  if (options.devClient === false) {
88
95
  // TODO: if development build, change this message!
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { BLT, printHelp, printItem, printQRCode, printUsage, StartOptions } from './commandsTable';\nimport * as Log from '../../log';\nimport { delayAsync } from '../../utils/delay';\nimport { learnMore } from '../../utils/link';\nimport { openBrowserAsync } from '../../utils/open';\nimport { ExpoChoice, selectAsync } from '../../utils/prompts';\nimport { DevServerManager } from '../server/DevServerManager';\nimport {\n addReactDevToolsReloadListener,\n startReactDevToolsProxyAsync,\n} from '../server/ReactDevToolsProxy';\nimport {\n MetroInspectorProxyApp,\n openJsInspector,\n queryAllInspectorAppsAsync,\n} from '../server/middleware/inspector/JsInspector';\n\nconst debug = require('debug')('expo:start:interface:interactiveActions') as typeof console.log;\n\ninterface MoreToolMenuItem extends ExpoChoice<string> {\n action?: () => unknown;\n}\n\n/** Wraps the DevServerManager and adds an interface for user actions. */\nexport class DevServerManagerActions {\n constructor(\n private devServerManager: DevServerManager,\n private options: Pick<StartOptions, 'devClient' | 'platforms'>\n ) {}\n\n printDevServerInfo(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>\n ) {\n // If native dev server is running, print its URL.\n if (this.devServerManager.getNativeDevServerPort()) {\n const devServer = this.devServerManager.getDefaultDevServer();\n try {\n const nativeRuntimeUrl = devServer.getNativeRuntimeUrl()!;\n const interstitialPageUrl = devServer.getRedirectUrl();\n\n printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n\n if (interstitialPageUrl) {\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n Log.log(printItem(chalk`Metro waiting on {underline ${nativeRuntimeUrl}}`));\n if (options.devClient === false) {\n // TODO: if development build, change this message!\n Log.log(\n printItem('Scan the QR code above with Expo Go (Android) or the Camera app (iOS)')\n );\n } else {\n Log.log(\n printItem(\n 'Scan the QR code above to open the project in a development build. ' +\n learnMore('https://expo.fyi/start')\n )\n );\n }\n } catch (error) {\n console.log('err', error);\n // @ts-ignore: If there is no development build scheme, then skip the QR code.\n if (error.code !== 'NO_DEV_CLIENT_SCHEME') {\n throw error;\n } else {\n const serverUrl = devServer.getDevServerUrl();\n Log.log(printItem(chalk`Metro waiting on {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n }\n }\n }\n\n if (this.options.platforms?.includes('web')) {\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log();\n Log.log(printItem(chalk`Web is waiting on {underline ${webUrl}}`));\n }\n }\n\n printUsage(options, { verbose: false });\n printHelp();\n Log.log();\n }\n\n async openJsInspectorAsync() {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n let app: MetroInspectorProxyApp | null = null;\n\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n if (apps.length === 1) {\n app = apps[0];\n } else {\n const choices = apps.map((app) => ({\n title: app.deviceName ?? 'Unknown device',\n value: app.id,\n app,\n }));\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n const menuItem = choices.find((item) => item.value === value);\n if (!menuItem) {\n return Log.error(chalk`{bold Debug:} No device available for \"${value}\"`);\n }\n\n app = menuItem.app;\n }\n\n if (!app) {\n return Log.error(chalk`{bold Debug:} No device selected`);\n }\n\n try {\n await openJsInspector(metroServerOrigin, app);\n } catch (error: any) {\n Log.error('Failed to open JavaScript inspector. This is often an issue with Google Chrome.');\n Log.exception(error);\n }\n }\n\n reloadApp() {\n Log.log(`${BLT} Reloading apps`);\n // Send reload requests over the dev servers\n this.devServerManager.broadcastMessage('reload');\n }\n\n async openMoreToolsAsync() {\n // Options match: Chrome > View > Developer\n try {\n const defaultMenuItems: MoreToolMenuItem[] = [\n { title: 'Inspect elements', value: 'toggleElementInspector' },\n { title: 'Toggle performance monitor', value: 'togglePerformanceMonitor' },\n { title: 'Toggle developer menu', value: 'toggleDevMenu' },\n { title: 'Reload app', value: 'reload' },\n {\n title: 'Open React devtools',\n value: 'openReactDevTools',\n action: this.openReactDevToolsAsync.bind(this),\n },\n // TODO: Maybe a \"View Source\" option to open code.\n ];\n const pluginMenuItems = (\n await this.devServerManager.devtoolsPluginManager.queryPluginsAsync()\n ).map((plugin) => ({\n title: chalk`Open {bold ${plugin.packageName}}`,\n value: `devtoolsPlugin:${plugin.packageName}`,\n action: async () => {\n const url = new URL(\n plugin.webpageEndpoint,\n this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' })\n );\n await openBrowserAsync(url.toString());\n },\n }));\n const menuItems = [...defaultMenuItems, ...pluginMenuItems];\n const value = await selectAsync(chalk`Dev tools {dim (native only)}`, menuItems);\n const menuItem = menuItems.find((item) => item.value === value);\n if (menuItem?.action) {\n menuItem.action();\n } else if (menuItem?.value) {\n this.devServerManager.broadcastMessage('sendDevCommand', { name: menuItem.value });\n }\n } catch (error: any) {\n debug(error);\n // do nothing\n } finally {\n printHelp();\n }\n }\n\n async openReactDevToolsAsync() {\n await startReactDevToolsProxyAsync();\n const url = this.devServerManager.getDefaultDevServer().getReactDevToolsUrl();\n await openBrowserAsync(url);\n addReactDevToolsReloadListener(() => {\n this.reconnectReactDevTools();\n });\n this.reconnectReactDevTools();\n }\n\n async reconnectReactDevTools() {\n // Wait a little time for react-devtools to be initialized in browser\n await delayAsync(3000);\n this.devServerManager.broadcastMessage('sendDevCommand', { name: 'reconnectReactDevTools' });\n }\n\n toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["DevServerManagerActions","debug","require","constructor","devServerManager","options","printDevServerInfo","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","printQRCode","Log","log","printItem","chalk","devClient","learnMore","error","console","code","serverUrl","getDevServerUrl","platforms","includes","webDevServer","getWebDevServer","webUrl","hostType","printUsage","verbose","printHelp","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","app","length","warn","choices","map","title","deviceName","value","id","selectAsync","menuItem","find","item","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","action","openReactDevToolsAsync","bind","pluginMenuItems","devtoolsPluginManager","queryPluginsAsync","plugin","packageName","url","URL","webpageEndpoint","getUrlCreator","constructUrl","scheme","openBrowserAsync","toString","menuItems","name","startReactDevToolsProxyAsync","getReactDevToolsUrl","addReactDevToolsReloadListener","reconnectReactDevTools","delayAsync","toggleDevMenu"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { BLT, printHelp, printItem, printQRCode, printUsage, StartOptions } from './commandsTable';\nimport * as Log from '../../log';\nimport { delayAsync } from '../../utils/delay';\nimport { env } from '../../utils/env';\nimport { learnMore } from '../../utils/link';\nimport { openBrowserAsync } from '../../utils/open';\nimport { ExpoChoice, selectAsync } from '../../utils/prompts';\nimport { DevServerManager } from '../server/DevServerManager';\nimport {\n addReactDevToolsReloadListener,\n startReactDevToolsProxyAsync,\n} from '../server/ReactDevToolsProxy';\nimport {\n MetroInspectorProxyApp,\n openJsInspector,\n queryAllInspectorAppsAsync,\n} from '../server/middleware/inspector/JsInspector';\n\nconst debug = require('debug')('expo:start:interface:interactiveActions') as typeof console.log;\n\ninterface MoreToolMenuItem extends ExpoChoice<string> {\n action?: () => unknown;\n}\n\n/** Wraps the DevServerManager and adds an interface for user actions. */\nexport class DevServerManagerActions {\n constructor(\n private devServerManager: DevServerManager,\n private options: Pick<StartOptions, 'devClient' | 'platforms'>\n ) {}\n\n printDevServerInfo(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>\n ) {\n // If native dev server is running, print its URL.\n if (this.devServerManager.getNativeDevServerPort()) {\n const devServer = this.devServerManager.getDefaultDevServer();\n try {\n const nativeRuntimeUrl = devServer.getNativeRuntimeUrl()!;\n const interstitialPageUrl = devServer.getRedirectUrl();\n\n printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n\n if (interstitialPageUrl) {\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n\n if (env.__EXPO_E2E_TEST) {\n // Print the URL to stdout for tests\n console.info(\n `[__EXPO_E2E_TEST:server] ${JSON.stringify({ url: devServer.getDevServerUrl() })}`\n );\n }\n\n Log.log(printItem(chalk`Metro waiting on {underline ${nativeRuntimeUrl}}`));\n if (options.devClient === false) {\n // TODO: if development build, change this message!\n Log.log(\n printItem('Scan the QR code above with Expo Go (Android) or the Camera app (iOS)')\n );\n } else {\n Log.log(\n printItem(\n 'Scan the QR code above to open the project in a development build. ' +\n learnMore('https://expo.fyi/start')\n )\n );\n }\n } catch (error) {\n console.log('err', error);\n // @ts-ignore: If there is no development build scheme, then skip the QR code.\n if (error.code !== 'NO_DEV_CLIENT_SCHEME') {\n throw error;\n } else {\n const serverUrl = devServer.getDevServerUrl();\n Log.log(printItem(chalk`Metro waiting on {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n }\n }\n }\n\n if (this.options.platforms?.includes('web')) {\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log();\n Log.log(printItem(chalk`Web is waiting on {underline ${webUrl}}`));\n }\n }\n\n printUsage(options, { verbose: false });\n printHelp();\n Log.log();\n }\n\n async openJsInspectorAsync() {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n let app: MetroInspectorProxyApp | null = null;\n\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n if (apps.length === 1) {\n app = apps[0];\n } else {\n const choices = apps.map((app) => ({\n title: app.deviceName ?? 'Unknown device',\n value: app.id,\n app,\n }));\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n const menuItem = choices.find((item) => item.value === value);\n if (!menuItem) {\n return Log.error(chalk`{bold Debug:} No device available for \"${value}\"`);\n }\n\n app = menuItem.app;\n }\n\n if (!app) {\n return Log.error(chalk`{bold Debug:} No device selected`);\n }\n\n try {\n await openJsInspector(metroServerOrigin, app);\n } catch (error: any) {\n Log.error('Failed to open JavaScript inspector. This is often an issue with Google Chrome.');\n Log.exception(error);\n }\n }\n\n reloadApp() {\n Log.log(`${BLT} Reloading apps`);\n // Send reload requests over the dev servers\n this.devServerManager.broadcastMessage('reload');\n }\n\n async openMoreToolsAsync() {\n // Options match: Chrome > View > Developer\n try {\n const defaultMenuItems: MoreToolMenuItem[] = [\n { title: 'Inspect elements', value: 'toggleElementInspector' },\n { title: 'Toggle performance monitor', value: 'togglePerformanceMonitor' },\n { title: 'Toggle developer menu', value: 'toggleDevMenu' },\n { title: 'Reload app', value: 'reload' },\n {\n title: 'Open React devtools',\n value: 'openReactDevTools',\n action: this.openReactDevToolsAsync.bind(this),\n },\n // TODO: Maybe a \"View Source\" option to open code.\n ];\n const pluginMenuItems = (\n await this.devServerManager.devtoolsPluginManager.queryPluginsAsync()\n ).map((plugin) => ({\n title: chalk`Open {bold ${plugin.packageName}}`,\n value: `devtoolsPlugin:${plugin.packageName}`,\n action: async () => {\n const url = new URL(\n plugin.webpageEndpoint,\n this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' })\n );\n await openBrowserAsync(url.toString());\n },\n }));\n const menuItems = [...defaultMenuItems, ...pluginMenuItems];\n const value = await selectAsync(chalk`Dev tools {dim (native only)}`, menuItems);\n const menuItem = menuItems.find((item) => item.value === value);\n if (menuItem?.action) {\n menuItem.action();\n } else if (menuItem?.value) {\n this.devServerManager.broadcastMessage('sendDevCommand', { name: menuItem.value });\n }\n } catch (error: any) {\n debug(error);\n // do nothing\n } finally {\n printHelp();\n }\n }\n\n async openReactDevToolsAsync() {\n await startReactDevToolsProxyAsync();\n const url = this.devServerManager.getDefaultDevServer().getReactDevToolsUrl();\n await openBrowserAsync(url);\n addReactDevToolsReloadListener(() => {\n this.reconnectReactDevTools();\n });\n this.reconnectReactDevTools();\n }\n\n async reconnectReactDevTools() {\n // Wait a little time for react-devtools to be initialized in browser\n await delayAsync(3000);\n this.devServerManager.broadcastMessage('sendDevCommand', { name: 'reconnectReactDevTools' });\n }\n\n toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["DevServerManagerActions","debug","require","constructor","devServerManager","options","printDevServerInfo","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","printQRCode","Log","log","printItem","chalk","env","__EXPO_E2E_TEST","console","info","JSON","stringify","url","getDevServerUrl","devClient","learnMore","error","code","serverUrl","platforms","includes","webDevServer","getWebDevServer","webUrl","hostType","printUsage","verbose","printHelp","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","app","length","warn","choices","map","title","deviceName","value","id","selectAsync","menuItem","find","item","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","action","openReactDevToolsAsync","bind","pluginMenuItems","devtoolsPluginManager","queryPluginsAsync","plugin","packageName","URL","webpageEndpoint","getUrlCreator","constructUrl","scheme","openBrowserAsync","toString","menuItems","name","startReactDevToolsProxyAsync","getReactDevToolsUrl","addReactDevToolsReloadListener","reconnectReactDevTools","delayAsync","toggleDevMenu"],"mappings":"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"}
@@ -179,7 +179,7 @@ async function metroFetchAsync(projectRoot, url) {
179
179
  // TODO: Improve error handling
180
180
  if (res.status === 500) {
181
181
  const text = await res.text();
182
- if (text.startsWith('{"originModulePath"') || text.startsWith('{"type":"TransformError"')) {
182
+ if (text.startsWith('{"originModulePath"') || text.startsWith('{"type":"TransformError"') || text.startsWith('{"type":"InternalError"')) {
183
183
  const errorObject = JSON.parse(text);
184
184
  var ref;
185
185
  throw new MetroNodeError((ref = (0, _ansi.stripAnsi)(errorObject.message)) != null ? ref : errorObject.message, errorObject);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/server/getStaticRenderFunctions.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport requireString from 'require-from-string';\nimport resolveFrom from 'resolve-from';\n\nimport { logMetroError, logMetroErrorAsync } from './metro/metroErrorInterface';\nimport { getMetroServerRoot } from './middleware/ManifestMiddleware';\nimport { createBundleUrlPath, ExpoMetroOptions } from './middleware/metroOptions';\nimport { augmentLogs } from './serverLogLikeMetro';\nimport { stripAnsi } from '../../utils/ansi';\nimport { delayAsync } from '../../utils/delay';\nimport { SilentError } from '../../utils/errors';\nimport { memoize } from '../../utils/fn';\nimport { profile } from '../../utils/profile';\n\n/** The list of input keys will become optional, everything else will remain the same. */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nclass MetroNodeError extends Error {\n constructor(\n message: string,\n public rawObject: any\n ) {\n super(message);\n }\n}\n\nconst debug = require('debug')('expo:start:server:node-renderer') as typeof console.log;\n\nconst cachedSourceMaps: Map<string, { url: string; map: string }> = new Map();\n\n// Support unhandled rejections\n// Detect if running in Bun\n\n// @ts-expect-error: This is a global variable that is set by Bun.\nif (!process.isBun) {\n require('source-map-support').install({\n retrieveSourceMap(source: string) {\n if (cachedSourceMaps.has(source)) {\n return cachedSourceMaps.get(source);\n }\n return null;\n },\n });\n}\n\nfunction wrapBundle(str: string) {\n // Skip the metro runtime so debugging is a bit easier.\n // Replace the __r() call with an export statement.\n // Use gm to apply to the last require line. This is needed when the bundle has side-effects.\n return str.replace(/^(__r\\(.*\\);)$/gm, 'module.exports = $1');\n}\n\n// TODO(EvanBacon): Group all the code together and version.\nconst getRenderModuleId = (\n projectRoot: string,\n entry: string = 'expo-router/node/render.js'\n): string => {\n const moduleId = resolveFrom.silent(projectRoot, entry);\n if (!moduleId) {\n throw new Error(\n `A version of expo-router with Node.js support is not installed in the project.`\n );\n }\n\n return moduleId;\n};\n\nconst moveStaticRenderFunction = memoize(async (projectRoot: string, requiredModuleId: string) => {\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, 'render.js');\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(requiredModuleId, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n});\n\n/** @returns the js file contents required to generate the static generation function. */\nasync function getStaticRenderFunctionsContentAsync(\n projectRoot: string,\n devServerUrl: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>,\n entry?: string\n): Promise<{ src: string; filename: string }> {\n const root = getMetroServerRoot(projectRoot);\n const requiredModuleId = getRenderModuleId(root, entry);\n let moduleId = requiredModuleId;\n\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (path.relative(root, moduleId).startsWith('..')) {\n moduleId = await moveStaticRenderFunction(projectRoot, requiredModuleId);\n }\n\n return requireFileContentsWithMetro(root, devServerUrl, moduleId, props);\n}\n\nasync function ensureFileInRootDirectory(projectRoot: string, otherFile: string) {\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (!path.relative(projectRoot, otherFile).startsWith('..' + path.sep)) {\n return otherFile;\n }\n\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static-tmp');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, path.basename(otherFile));\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(otherFile, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n}\n\nexport async function createMetroEndpointAsync(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const safeOtherFile = await ensureFileInRootDirectory(projectRoot, absoluteFilePath);\n const serverPath = path.relative(root, safeOtherFile).replace(/\\.[jt]sx?$/, '');\n\n const urlFragment = createBundleUrlPath({\n mainModuleName: serverPath,\n lazy: false,\n asyncRoutes: false,\n inlineSourceMap: false,\n engine: 'hermes',\n minify: false,\n bytecode: false,\n ...props,\n });\n\n let url: string;\n if (devServerUrl) {\n url = new URL(urlFragment.replace(/^\\//, ''), devServerUrl).toString();\n } else {\n url = '/' + urlFragment.replace(/^\\/+/, '');\n }\n return url;\n}\n\nexport async function requireFileContentsWithMetro(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>\n): Promise<{ src: string; filename: string }> {\n const url = await createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, props);\n return await metroFetchAsync(projectRoot, url);\n}\n\nasync function metroFetchAsync(\n projectRoot: string,\n url: string\n): Promise<{ src: string; filename: string; map?: any }> {\n debug('Fetching from Metro:', url);\n // TODO: Skip the dev server and use the Metro instance directly for better results, faster.\n const res = await fetch(url);\n\n // TODO: Improve error handling\n if (res.status === 500) {\n const text = await res.text();\n if (text.startsWith('{\"originModulePath\"') || text.startsWith('{\"type\":\"TransformError\"')) {\n const errorObject = JSON.parse(text);\n\n throw new MetroNodeError(stripAnsi(errorObject.message) ?? errorObject.message, errorObject);\n }\n throw new Error(`[${res.status}]: ${res.statusText}\\n${text}`);\n }\n\n if (!res.ok) {\n throw new Error(`Error fetching bundle for static rendering: ${res.status} ${res.statusText}`);\n }\n\n const content = await res.text();\n\n const map = await fetch(url.replace('.bundle?', '.map?')).then((r) => r.json());\n cachedSourceMaps.set(url, { url: projectRoot, map });\n\n return {\n src: wrapBundle(content),\n filename: url,\n map,\n };\n}\n\nexport async function getStaticRenderFunctionsForEntry<T = any>(\n projectRoot: string,\n devServerUrl: string,\n options: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>,\n entry: string\n) {\n const { src: scriptContents, filename } = await getStaticRenderFunctionsContentAsync(\n projectRoot,\n devServerUrl,\n options,\n entry\n );\n\n return {\n filename,\n fn: await evalMetroAndWrapFunctions<T>(projectRoot, scriptContents, filename),\n };\n}\n\nfunction evalMetroAndWrapFunctions<T = Record<string, any>>(\n projectRoot: string,\n script: string,\n filename: string\n): Promise<T> {\n const contents = evalMetro(projectRoot, script, filename);\n // wrap each function with a try/catch that uses Metro's error formatter\n return Object.keys(contents).reduce((acc, key) => {\n const fn = contents[key];\n if (typeof fn !== 'function') {\n return { ...acc, [key]: fn };\n }\n\n acc[key] = async function (...props: any[]) {\n try {\n return await fn.apply(this, props);\n } catch (error: any) {\n await logMetroError(projectRoot, { error });\n throw new SilentError(error);\n }\n };\n return acc;\n }, {} as any);\n}\n\nexport function evalMetro(projectRoot: string, src: string, filename: string) {\n try {\n return evalMetroNoHandling(projectRoot, src, filename);\n } catch (error: any) {\n // Format any errors that were thrown in the global scope of the evaluation.\n if (error instanceof Error) {\n logMetroErrorAsync({ projectRoot, error }).catch((internalError) => {\n debug('Failed to log metro error:', internalError);\n throw error;\n });\n } else {\n throw error;\n }\n }\n}\n\nexport function evalMetroNoHandling(projectRoot: string, src: string, filename: string) {\n augmentLogs(projectRoot);\n\n return profile(requireString, 'eval-metro-bundle')(src, filename);\n}\n"],"names":["createMetroEndpointAsync","requireFileContentsWithMetro","getStaticRenderFunctionsForEntry","evalMetro","evalMetroNoHandling","MetroNodeError","Error","constructor","message","rawObject","debug","require","cachedSourceMaps","Map","process","isBun","install","retrieveSourceMap","source","has","get","wrapBundle","str","replace","getRenderModuleId","projectRoot","entry","moduleId","resolveFrom","silent","moveStaticRenderFunction","memoize","requiredModuleId","tempDir","path","join","fs","promises","mkdir","recursive","writeFile","readFile","delayAsync","getStaticRenderFunctionsContentAsync","devServerUrl","props","root","getMetroServerRoot","relative","startsWith","ensureFileInRootDirectory","otherFile","sep","basename","absoluteFilePath","safeOtherFile","serverPath","urlFragment","createBundleUrlPath","mainModuleName","lazy","asyncRoutes","inlineSourceMap","engine","minify","bytecode","url","URL","toString","metroFetchAsync","res","fetch","status","text","errorObject","JSON","parse","stripAnsi","statusText","ok","content","map","then","r","json","set","src","filename","options","scriptContents","fn","evalMetroAndWrapFunctions","script","contents","Object","keys","reduce","acc","key","apply","error","logMetroError","SilentError","logMetroErrorAsync","catch","internalError","augmentLogs","profile","requireString"],"mappings":"AAAA;;;;;CAKC,GACD;;;;;;;;;;;IAuHsBA,wBAAwB,MAAxBA,wBAAwB;IA8BxBC,4BAA4B,MAA5BA,4BAA4B;IA6C5BC,gCAAgC,MAAhCA,gCAAgC;IA4CtCC,SAAS,MAATA,SAAS;IAgBTC,mBAAmB,MAAnBA,mBAAmB;;;8DA9PpB,IAAI;;;;;;;8DACD,YAAY;;;;;;;8DACb,MAAM;;;;;;;8DACG,qBAAqB;;;;;;;8DACvB,cAAc;;;;;;qCAEY,6BAA6B;oCAC5C,iCAAiC;8BACd,2BAA2B;oCACrD,sBAAsB;sBACxB,kBAAkB;uBACjB,mBAAmB;wBAClB,oBAAoB;oBACxB,gBAAgB;yBAChB,qBAAqB;;;;;;AAK7C,MAAMC,cAAc,SAASC,KAAK;IAChCC,YACEC,OAAe,EACRC,SAAc,CACrB;QACA,KAAK,CAACD,OAAO,CAAC,CAAC;QAFRC,iBAAAA,SAAc,CAAA;IAGvB;CACD;AAED,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,iCAAiC,CAAC,AAAsB,AAAC;AAExF,MAAMC,gBAAgB,GAA8C,IAAIC,GAAG,EAAE,AAAC;AAE9E,+BAA+B;AAC/B,2BAA2B;AAE3B,kEAAkE;AAClE,IAAI,CAACC,OAAO,CAACC,KAAK,EAAE;IAClBJ,OAAO,CAAC,oBAAoB,CAAC,CAACK,OAAO,CAAC;QACpCC,iBAAiB,EAACC,MAAc,EAAE;YAChC,IAAIN,gBAAgB,CAACO,GAAG,CAACD,MAAM,CAAC,EAAE;gBAChC,OAAON,gBAAgB,CAACQ,GAAG,CAACF,MAAM,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAASG,UAAU,CAACC,GAAW,EAAE;IAC/B,uDAAuD;IACvD,mDAAmD;IACnD,6FAA6F;IAC7F,OAAOA,GAAG,CAACC,OAAO,qBAAqB,qBAAqB,CAAC,CAAC;AAChE,CAAC;AAED,4DAA4D;AAC5D,MAAMC,iBAAiB,GAAG,CACxBC,WAAmB,EACnBC,KAAa,GAAG,4BAA4B,GACjC;IACX,MAAMC,QAAQ,GAAGC,YAAW,EAAA,QAAA,CAACC,MAAM,CAACJ,WAAW,EAAEC,KAAK,CAAC,AAAC;IACxD,IAAI,CAACC,QAAQ,EAAE;QACb,MAAM,IAAIrB,KAAK,CACb,CAAC,8EAA8E,CAAC,CACjF,CAAC;IACJ,CAAC;IAED,OAAOqB,QAAQ,CAAC;AAClB,CAAC,AAAC;AAEF,MAAMG,wBAAwB,GAAGC,IAAAA,GAAO,QAAA,EAAC,OAAON,WAAmB,EAAEO,gBAAwB,GAAK;IAChG,kEAAkE;IAClE,wDAAwD;IACxD,MAAMC,OAAO,GAAGC,KAAI,EAAA,QAAA,CAACC,IAAI,CAACV,WAAW,EAAE,cAAc,CAAC,AAAC;IACvD,MAAMW,GAAE,EAAA,QAAA,CAACC,QAAQ,CAACC,KAAK,CAACL,OAAO,EAAE;QAAEM,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IACtD,MAAMZ,QAAQ,GAAGO,KAAI,EAAA,QAAA,CAACC,IAAI,CAACF,OAAO,EAAE,WAAW,CAAC,AAAC;IACjD,MAAMG,GAAE,EAAA,QAAA,CAACC,QAAQ,CAACG,SAAS,CAACb,QAAQ,EAAE,MAAMS,GAAE,EAAA,QAAA,CAACC,QAAQ,CAACI,QAAQ,CAACT,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5F,oDAAoD;IACpD,MAAMU,IAAAA,MAAU,WAAA,EAAC,EAAE,CAAC,CAAC;IACrB,OAAOf,QAAQ,CAAC;AAClB,CAAC,CAAC,AAAC;AAEH,uFAAuF,GACvF,eAAegB,oCAAoC,CACjDlB,WAAmB,EACnBmB,YAAoB,EACpBC,KAAmE,EACnEnB,KAAc,EAC8B;IAC5C,MAAMoB,IAAI,GAAGC,IAAAA,mBAAkB,mBAAA,EAACtB,WAAW,CAAC,AAAC;IAC7C,MAAMO,gBAAgB,GAAGR,iBAAiB,CAACsB,IAAI,EAAEpB,KAAK,CAAC,AAAC;IACxD,IAAIC,QAAQ,GAAGK,gBAAgB,AAAC;IAEhC,wEAAwE;IACxE,uCAAuC;IACvC,IAAIE,KAAI,EAAA,QAAA,CAACc,QAAQ,CAACF,IAAI,EAAEnB,QAAQ,CAAC,CAACsB,UAAU,CAAC,IAAI,CAAC,EAAE;QAClDtB,QAAQ,GAAG,MAAMG,wBAAwB,CAACL,WAAW,EAAEO,gBAAgB,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO/B,4BAA4B,CAAC6C,IAAI,EAAEF,YAAY,EAAEjB,QAAQ,EAAEkB,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,eAAeK,yBAAyB,CAACzB,WAAmB,EAAE0B,SAAiB,EAAE;IAC/E,wEAAwE;IACxE,uCAAuC;IACvC,IAAI,CAACjB,KAAI,EAAA,QAAA,CAACc,QAAQ,CAACvB,WAAW,EAAE0B,SAAS,CAAC,CAACF,UAAU,CAAC,IAAI,GAAGf,KAAI,EAAA,QAAA,CAACkB,GAAG,CAAC,EAAE;QACtE,OAAOD,SAAS,CAAC;IACnB,CAAC;IAED,kEAAkE;IAClE,wDAAwD;IACxD,MAAMlB,OAAO,GAAGC,KAAI,EAAA,QAAA,CAACC,IAAI,CAACV,WAAW,EAAE,kBAAkB,CAAC,AAAC;IAC3D,MAAMW,GAAE,EAAA,QAAA,CAACC,QAAQ,CAACC,KAAK,CAACL,OAAO,EAAE;QAAEM,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IACtD,MAAMZ,QAAQ,GAAGO,KAAI,EAAA,QAAA,CAACC,IAAI,CAACF,OAAO,EAAEC,KAAI,EAAA,QAAA,CAACmB,QAAQ,CAACF,SAAS,CAAC,CAAC,AAAC;IAC9D,MAAMf,GAAE,EAAA,QAAA,CAACC,QAAQ,CAACG,SAAS,CAACb,QAAQ,EAAE,MAAMS,GAAE,EAAA,QAAA,CAACC,QAAQ,CAACI,QAAQ,CAACU,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,oDAAoD;IACpD,MAAMT,IAAAA,MAAU,WAAA,EAAC,EAAE,CAAC,CAAC;IACrB,OAAOf,QAAQ,CAAC;AAClB,CAAC;AAEM,eAAe3B,wBAAwB,CAC5CyB,WAAmB,EACnBmB,YAAoB,EACpBU,gBAAwB,EACxBT,KAAmE,EAClD;IACjB,MAAMC,IAAI,GAAGC,IAAAA,mBAAkB,mBAAA,EAACtB,WAAW,CAAC,AAAC;IAC7C,MAAM8B,aAAa,GAAG,MAAML,yBAAyB,CAACzB,WAAW,EAAE6B,gBAAgB,CAAC,AAAC;IACrF,MAAME,UAAU,GAAGtB,KAAI,EAAA,QAAA,CAACc,QAAQ,CAACF,IAAI,EAAES,aAAa,CAAC,CAAChC,OAAO,eAAe,EAAE,CAAC,AAAC;IAEhF,MAAMkC,WAAW,GAAGC,IAAAA,aAAmB,oBAAA,EAAC;QACtCC,cAAc,EAAEH,UAAU;QAC1BI,IAAI,EAAE,KAAK;QACXC,WAAW,EAAE,KAAK;QAClBC,eAAe,EAAE,KAAK;QACtBC,MAAM,EAAE,QAAQ;QAChBC,MAAM,EAAE,KAAK;QACbC,QAAQ,EAAE,KAAK;QACf,GAAGpB,KAAK;KACT,CAAC,AAAC;IAEH,IAAIqB,GAAG,AAAQ,AAAC;IAChB,IAAItB,YAAY,EAAE;QAChBsB,GAAG,GAAG,IAAIC,GAAG,CAACV,WAAW,CAAClC,OAAO,QAAQ,EAAE,CAAC,EAAEqB,YAAY,CAAC,CAACwB,QAAQ,EAAE,CAAC;IACzE,OAAO;QACLF,GAAG,GAAG,GAAG,GAAGT,WAAW,CAAClC,OAAO,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO2C,GAAG,CAAC;AACb,CAAC;AAEM,eAAejE,4BAA4B,CAChDwB,WAAmB,EACnBmB,YAAoB,EACpBU,gBAAwB,EACxBT,KAAmE,EACvB;IAC5C,MAAMqB,GAAG,GAAG,MAAMlE,wBAAwB,CAACyB,WAAW,EAAEmB,YAAY,EAAEU,gBAAgB,EAAET,KAAK,CAAC,AAAC;IAC/F,OAAO,MAAMwB,eAAe,CAAC5C,WAAW,EAAEyC,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,eAAeG,eAAe,CAC5B5C,WAAmB,EACnByC,GAAW,EAC4C;IACvDxD,KAAK,CAAC,sBAAsB,EAAEwD,GAAG,CAAC,CAAC;IACnC,4FAA4F;IAC5F,MAAMI,GAAG,GAAG,MAAMC,IAAAA,UAAK,EAAA,QAAA,EAACL,GAAG,CAAC,AAAC;IAE7B,+BAA+B;IAC/B,IAAII,GAAG,CAACE,MAAM,KAAK,GAAG,EAAE;QACtB,MAAMC,IAAI,GAAG,MAAMH,GAAG,CAACG,IAAI,EAAE,AAAC;QAC9B,IAAIA,IAAI,CAACxB,UAAU,CAAC,qBAAqB,CAAC,IAAIwB,IAAI,CAACxB,UAAU,CAAC,0BAA0B,CAAC,EAAE;YACzF,MAAMyB,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC,AAAC;gBAEZI,GAA8B;YAAvD,MAAM,IAAIxE,cAAc,CAACwE,CAAAA,GAA8B,GAA9BA,IAAAA,KAAS,UAAA,EAACH,WAAW,CAAClE,OAAO,CAAC,YAA9BqE,GAA8B,GAAIH,WAAW,CAAClE,OAAO,EAAEkE,WAAW,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,IAAIpE,KAAK,CAAC,CAAC,CAAC,EAAEgE,GAAG,CAACE,MAAM,CAAC,GAAG,EAAEF,GAAG,CAACQ,UAAU,CAAC,EAAE,EAAEL,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAACH,GAAG,CAACS,EAAE,EAAE;QACX,MAAM,IAAIzE,KAAK,CAAC,CAAC,4CAA4C,EAAEgE,GAAG,CAACE,MAAM,CAAC,CAAC,EAAEF,GAAG,CAACQ,UAAU,CAAC,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,MAAME,OAAO,GAAG,MAAMV,GAAG,CAACG,IAAI,EAAE,AAAC;IAEjC,MAAMQ,GAAG,GAAG,MAAMV,IAAAA,UAAK,EAAA,QAAA,EAACL,GAAG,CAAC3C,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC2D,IAAI,CAAC,CAACC,CAAC,GAAKA,CAAC,CAACC,IAAI,EAAE,CAAC,AAAC;IAChFxE,gBAAgB,CAACyE,GAAG,CAACnB,GAAG,EAAE;QAAEA,GAAG,EAAEzC,WAAW;QAAEwD,GAAG;KAAE,CAAC,CAAC;IAErD,OAAO;QACLK,GAAG,EAAEjE,UAAU,CAAC2D,OAAO,CAAC;QACxBO,QAAQ,EAAErB,GAAG;QACbe,GAAG;KACJ,CAAC;AACJ,CAAC;AAEM,eAAe/E,gCAAgC,CACpDuB,WAAmB,EACnBmB,YAAoB,EACpB4C,OAAqE,EACrE9D,KAAa,EACb;IACA,MAAM,EAAE4D,GAAG,EAAEG,cAAc,CAAA,EAAEF,QAAQ,CAAA,EAAE,GAAG,MAAM5C,oCAAoC,CAClFlB,WAAW,EACXmB,YAAY,EACZ4C,OAAO,EACP9D,KAAK,CACN,AAAC;IAEF,OAAO;QACL6D,QAAQ;QACRG,EAAE,EAAE,MAAMC,yBAAyB,CAAIlE,WAAW,EAAEgE,cAAc,EAAEF,QAAQ,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAASI,yBAAyB,CAChClE,WAAmB,EACnBmE,MAAc,EACdL,QAAgB,EACJ;IACZ,MAAMM,QAAQ,GAAG1F,SAAS,CAACsB,WAAW,EAAEmE,MAAM,EAAEL,QAAQ,CAAC,AAAC;IAC1D,wEAAwE;IACxE,OAAOO,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACG,MAAM,CAAC,CAACC,GAAG,EAAEC,GAAG,GAAK;QAChD,MAAMR,EAAE,GAAGG,QAAQ,CAACK,GAAG,CAAC,AAAC;QACzB,IAAI,OAAOR,EAAE,KAAK,UAAU,EAAE;YAC5B,OAAO;gBAAE,GAAGO,GAAG;gBAAE,CAACC,GAAG,CAAC,EAAER,EAAE;aAAE,CAAC;QAC/B,CAAC;QAEDO,GAAG,CAACC,GAAG,CAAC,GAAG,eAAgB,GAAGrD,KAAK,AAAO,EAAE;YAC1C,IAAI;gBACF,OAAO,MAAM6C,EAAE,CAACS,KAAK,CAAC,IAAI,EAAEtD,KAAK,CAAC,CAAC;YACrC,EAAE,OAAOuD,KAAK,EAAO;gBACnB,MAAMC,IAAAA,oBAAa,cAAA,EAAC5E,WAAW,EAAE;oBAAE2E,KAAK;iBAAE,CAAC,CAAC;gBAC5C,MAAM,IAAIE,OAAW,YAAA,CAACF,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC;QACF,OAAOH,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAQ,CAAC;AAChB,CAAC;AAEM,SAAS9F,SAAS,CAACsB,WAAmB,EAAE6D,GAAW,EAAEC,QAAgB,EAAE;IAC5E,IAAI;QACF,OAAOnF,mBAAmB,CAACqB,WAAW,EAAE6D,GAAG,EAAEC,QAAQ,CAAC,CAAC;IACzD,EAAE,OAAOa,KAAK,EAAO;QACnB,4EAA4E;QAC5E,IAAIA,KAAK,YAAY9F,KAAK,EAAE;YAC1BiG,IAAAA,oBAAkB,mBAAA,EAAC;gBAAE9E,WAAW;gBAAE2E,KAAK;aAAE,CAAC,CAACI,KAAK,CAAC,CAACC,aAAa,GAAK;gBAClE/F,KAAK,CAAC,4BAA4B,EAAE+F,aAAa,CAAC,CAAC;gBACnD,MAAML,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,OAAO;YACL,MAAMA,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAEM,SAAShG,mBAAmB,CAACqB,WAAmB,EAAE6D,GAAW,EAAEC,QAAgB,EAAE;IACtFmB,IAAAA,mBAAW,YAAA,EAACjF,WAAW,CAAC,CAAC;IAEzB,OAAOkF,IAAAA,QAAO,QAAA,EAACC,kBAAa,EAAA,QAAA,EAAE,mBAAmB,CAAC,CAACtB,GAAG,EAAEC,QAAQ,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"sources":["../../../../src/start/server/getStaticRenderFunctions.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport requireString from 'require-from-string';\nimport resolveFrom from 'resolve-from';\n\nimport { logMetroError, logMetroErrorAsync } from './metro/metroErrorInterface';\nimport { getMetroServerRoot } from './middleware/ManifestMiddleware';\nimport { createBundleUrlPath, ExpoMetroOptions } from './middleware/metroOptions';\nimport { augmentLogs } from './serverLogLikeMetro';\nimport { stripAnsi } from '../../utils/ansi';\nimport { delayAsync } from '../../utils/delay';\nimport { SilentError } from '../../utils/errors';\nimport { memoize } from '../../utils/fn';\nimport { profile } from '../../utils/profile';\n\n/** The list of input keys will become optional, everything else will remain the same. */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nclass MetroNodeError extends Error {\n constructor(\n message: string,\n public rawObject: any\n ) {\n super(message);\n }\n}\n\nconst debug = require('debug')('expo:start:server:node-renderer') as typeof console.log;\n\nconst cachedSourceMaps: Map<string, { url: string; map: string }> = new Map();\n\n// Support unhandled rejections\n// Detect if running in Bun\n\n// @ts-expect-error: This is a global variable that is set by Bun.\nif (!process.isBun) {\n require('source-map-support').install({\n retrieveSourceMap(source: string) {\n if (cachedSourceMaps.has(source)) {\n return cachedSourceMaps.get(source);\n }\n return null;\n },\n });\n}\n\nfunction wrapBundle(str: string) {\n // Skip the metro runtime so debugging is a bit easier.\n // Replace the __r() call with an export statement.\n // Use gm to apply to the last require line. This is needed when the bundle has side-effects.\n return str.replace(/^(__r\\(.*\\);)$/gm, 'module.exports = $1');\n}\n\n// TODO(EvanBacon): Group all the code together and version.\nconst getRenderModuleId = (\n projectRoot: string,\n entry: string = 'expo-router/node/render.js'\n): string => {\n const moduleId = resolveFrom.silent(projectRoot, entry);\n if (!moduleId) {\n throw new Error(\n `A version of expo-router with Node.js support is not installed in the project.`\n );\n }\n\n return moduleId;\n};\n\nconst moveStaticRenderFunction = memoize(async (projectRoot: string, requiredModuleId: string) => {\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, 'render.js');\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(requiredModuleId, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n});\n\n/** @returns the js file contents required to generate the static generation function. */\nasync function getStaticRenderFunctionsContentAsync(\n projectRoot: string,\n devServerUrl: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>,\n entry?: string\n): Promise<{ src: string; filename: string }> {\n const root = getMetroServerRoot(projectRoot);\n const requiredModuleId = getRenderModuleId(root, entry);\n let moduleId = requiredModuleId;\n\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (path.relative(root, moduleId).startsWith('..')) {\n moduleId = await moveStaticRenderFunction(projectRoot, requiredModuleId);\n }\n\n return requireFileContentsWithMetro(root, devServerUrl, moduleId, props);\n}\n\nasync function ensureFileInRootDirectory(projectRoot: string, otherFile: string) {\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (!path.relative(projectRoot, otherFile).startsWith('..' + path.sep)) {\n return otherFile;\n }\n\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static-tmp');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, path.basename(otherFile));\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(otherFile, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n}\n\nexport async function createMetroEndpointAsync(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const safeOtherFile = await ensureFileInRootDirectory(projectRoot, absoluteFilePath);\n const serverPath = path.relative(root, safeOtherFile).replace(/\\.[jt]sx?$/, '');\n\n const urlFragment = createBundleUrlPath({\n mainModuleName: serverPath,\n lazy: false,\n asyncRoutes: false,\n inlineSourceMap: false,\n engine: 'hermes',\n minify: false,\n bytecode: false,\n ...props,\n });\n\n let url: string;\n if (devServerUrl) {\n url = new URL(urlFragment.replace(/^\\//, ''), devServerUrl).toString();\n } else {\n url = '/' + urlFragment.replace(/^\\/+/, '');\n }\n return url;\n}\n\nexport async function requireFileContentsWithMetro(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>\n): Promise<{ src: string; filename: string }> {\n const url = await createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, props);\n return await metroFetchAsync(projectRoot, url);\n}\n\nasync function metroFetchAsync(\n projectRoot: string,\n url: string\n): Promise<{ src: string; filename: string; map?: any }> {\n debug('Fetching from Metro:', url);\n // TODO: Skip the dev server and use the Metro instance directly for better results, faster.\n const res = await fetch(url);\n\n // TODO: Improve error handling\n if (res.status === 500) {\n const text = await res.text();\n if (\n text.startsWith('{\"originModulePath\"') ||\n text.startsWith('{\"type\":\"TransformError\"') ||\n text.startsWith('{\"type\":\"InternalError\"')\n ) {\n const errorObject = JSON.parse(text);\n\n throw new MetroNodeError(stripAnsi(errorObject.message) ?? errorObject.message, errorObject);\n }\n throw new Error(`[${res.status}]: ${res.statusText}\\n${text}`);\n }\n\n if (!res.ok) {\n throw new Error(`Error fetching bundle for static rendering: ${res.status} ${res.statusText}`);\n }\n\n const content = await res.text();\n\n const map = await fetch(url.replace('.bundle?', '.map?')).then((r) => r.json());\n cachedSourceMaps.set(url, { url: projectRoot, map });\n\n return {\n src: wrapBundle(content),\n filename: url,\n map,\n };\n}\n\nexport async function getStaticRenderFunctionsForEntry<T = any>(\n projectRoot: string,\n devServerUrl: string,\n options: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>,\n entry: string\n) {\n const { src: scriptContents, filename } = await getStaticRenderFunctionsContentAsync(\n projectRoot,\n devServerUrl,\n options,\n entry\n );\n\n return {\n filename,\n fn: await evalMetroAndWrapFunctions<T>(projectRoot, scriptContents, filename),\n };\n}\n\nfunction evalMetroAndWrapFunctions<T = Record<string, any>>(\n projectRoot: string,\n script: string,\n filename: string\n): Promise<T> {\n const contents = evalMetro(projectRoot, script, filename);\n // wrap each function with a try/catch that uses Metro's error formatter\n return Object.keys(contents).reduce((acc, key) => {\n const fn = contents[key];\n if (typeof fn !== 'function') {\n return { ...acc, [key]: fn };\n }\n\n acc[key] = async function (...props: any[]) {\n try {\n return await fn.apply(this, props);\n } catch (error: any) {\n await logMetroError(projectRoot, { error });\n throw new SilentError(error);\n }\n };\n return acc;\n }, {} as any);\n}\n\nexport function evalMetro(projectRoot: string, src: string, filename: string) {\n try {\n return evalMetroNoHandling(projectRoot, src, filename);\n } catch (error: any) {\n // Format any errors that were thrown in the global scope of the evaluation.\n if (error instanceof Error) {\n logMetroErrorAsync({ projectRoot, error }).catch((internalError) => {\n debug('Failed to log metro error:', internalError);\n throw error;\n });\n } else {\n throw error;\n }\n }\n}\n\nexport function evalMetroNoHandling(projectRoot: string, src: string, filename: string) {\n augmentLogs(projectRoot);\n\n return profile(requireString, 'eval-metro-bundle')(src, filename);\n}\n"],"names":["createMetroEndpointAsync","requireFileContentsWithMetro","getStaticRenderFunctionsForEntry","evalMetro","evalMetroNoHandling","MetroNodeError","Error","constructor","message","rawObject","debug","require","cachedSourceMaps","Map","process","isBun","install","retrieveSourceMap","source","has","get","wrapBundle","str","replace","getRenderModuleId","projectRoot","entry","moduleId","resolveFrom","silent","moveStaticRenderFunction","memoize","requiredModuleId","tempDir","path","join","fs","promises","mkdir","recursive","writeFile","readFile","delayAsync","getStaticRenderFunctionsContentAsync","devServerUrl","props","root","getMetroServerRoot","relative","startsWith","ensureFileInRootDirectory","otherFile","sep","basename","absoluteFilePath","safeOtherFile","serverPath","urlFragment","createBundleUrlPath","mainModuleName","lazy","asyncRoutes","inlineSourceMap","engine","minify","bytecode","url","URL","toString","metroFetchAsync","res","fetch","status","text","errorObject","JSON","parse","stripAnsi","statusText","ok","content","map","then","r","json","set","src","filename","options","scriptContents","fn","evalMetroAndWrapFunctions","script","contents","Object","keys","reduce","acc","key","apply","error","logMetroError","SilentError","logMetroErrorAsync","catch","internalError","augmentLogs","profile","requireString"],"mappings":"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"}
@@ -31,6 +31,7 @@ const _openPlatforms = require("./server/openPlatforms");
31
31
  const _platformBundlers = require("./server/platformBundlers");
32
32
  const _log = /*#__PURE__*/ _interopRequireWildcard(require("../log"));
33
33
  const _getDevClientProperties = /*#__PURE__*/ _interopRequireDefault(require("../utils/analytics/getDevClientProperties"));
34
+ const _env = require("../utils/env");
34
35
  const _exit = require("../utils/exit");
35
36
  const _interactive = require("../utils/interactive");
36
37
  const _nodeEnv = require("../utils/nodeEnv");
@@ -176,6 +177,12 @@ async function startAsync(projectRoot, options, settings) {
176
177
  // Display the server location in CI...
177
178
  const url = (ref1 = devServerManager.getDefaultDevServer()) == null ? void 0 : ref1.getDevServerUrl();
178
179
  if (url) {
180
+ if (_env.env.__EXPO_E2E_TEST) {
181
+ // Print the URL to stdout for tests
182
+ console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({
183
+ url
184
+ })}`);
185
+ }
179
186
  _log.log((0, _chalk().default)`Waiting on {underline ${url}}`);
180
187
  }
181
188
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/start/startAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { SimulatorAppPrerequisite } from './doctor/apple/SimulatorAppPrerequisite';\nimport { getXcodeVersionAsync } from './doctor/apple/XcodePrerequisite';\nimport { validateDependenciesVersionsAsync } from './doctor/dependencies/validateDependenciesVersions';\nimport { WebSupportProjectPrerequisite } from './doctor/web/WebSupportProjectPrerequisite';\nimport { startInterfaceAsync } from './interface/startInterface';\nimport { Options, resolvePortsAsync } from './resolveOptions';\nimport { BundlerStartOptions } from './server/BundlerDevServer';\nimport { DevServerManager, MultiBundlerStartOptions } from './server/DevServerManager';\nimport { openPlatformsAsync } from './server/openPlatforms';\nimport { getPlatformBundlers, PlatformBundlers } from './server/platformBundlers';\nimport * as Log from '../log';\nimport getDevClientProperties from '../utils/analytics/getDevClientProperties';\nimport { installExitHooks } from '../utils/exit';\nimport { isInteractive } from '../utils/interactive';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { profile } from '../utils/profile';\nimport { logEventAsync } from '../utils/telemetry';\n\nasync function getMultiBundlerStartOptions(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean },\n platformBundlers: PlatformBundlers\n): Promise<[BundlerStartOptions, MultiBundlerStartOptions]> {\n const commonOptions: BundlerStartOptions = {\n mode: options.dev ? 'development' : 'production',\n devClient: options.devClient,\n privateKeyPath: options.privateKeyPath ?? undefined,\n https: options.https,\n maxWorkers: options.maxWorkers,\n resetDevServer: options.clear,\n minify: options.minify,\n location: {\n hostType: options.host,\n scheme: options.scheme,\n },\n };\n const multiBundlerSettings = await resolvePortsAsync(projectRoot, options, settings);\n\n const optionalBundlers: Partial<PlatformBundlers> = { ...platformBundlers };\n // In the default case, we don't want to start multiple bundlers since this is\n // a bit slower. Our priority (for legacy) is native platforms.\n if (!options.web) {\n delete optionalBundlers['web'];\n }\n\n const bundlers = [...new Set(Object.values(optionalBundlers))];\n const multiBundlerStartOptions = bundlers.map((bundler) => {\n const port =\n bundler === 'webpack' ? multiBundlerSettings.webpackPort : multiBundlerSettings.metroPort;\n return {\n type: bundler,\n options: {\n ...commonOptions,\n port,\n },\n };\n });\n\n return [commonOptions, multiBundlerStartOptions];\n}\n\nexport async function startAsync(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean }\n) {\n Log.log(chalk.gray(`Starting project at ${projectRoot}`));\n\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n const { exp, pkg } = profile(getConfig)(projectRoot);\n\n if (exp.platforms?.includes('ios') && process.platform !== 'win32') {\n // If Xcode could potentially be used, then we should eagerly perform the\n // assertions since they can take a while on cold boots.\n getXcodeVersionAsync({ silent: true });\n SimulatorAppPrerequisite.instance.assertAsync().catch(() => {\n // noop -- this will be thrown again when the user attempts to open the project.\n });\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(\n projectRoot,\n options,\n settings,\n platformBundlers\n );\n\n const devServerManager = new DevServerManager(projectRoot, defaultOptions);\n\n // Validations\n\n if (options.web || settings.webOnly) {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n }\n\n // Start the server as soon as possible.\n await profile(devServerManager.startAsync.bind(devServerManager))(startOptions);\n\n if (!settings.webOnly) {\n await devServerManager.watchEnvironmentVariables();\n\n // After the server starts, we can start attempting to bootstrap TypeScript.\n await devServerManager.bootstrapTypeScriptAsync();\n }\n\n if (!settings.webOnly && !options.devClient) {\n await profile(validateDependenciesVersionsAsync)(projectRoot, exp, pkg);\n }\n\n // Some tracking thing\n\n if (options.devClient) {\n await trackAsync(projectRoot, exp);\n }\n\n // Open project on devices.\n await profile(openPlatformsAsync)(devServerManager, options);\n\n // Present the Terminal UI.\n if (isInteractive()) {\n await profile(startInterfaceAsync)(devServerManager, {\n platforms: exp.platforms ?? ['ios', 'android', 'web'],\n });\n } else {\n // Display the server location in CI...\n const url = devServerManager.getDefaultDevServer()?.getDevServerUrl();\n if (url) {\n Log.log(chalk`Waiting on {underline ${url}}`);\n }\n }\n\n // Final note about closing the server.\n const logLocation = settings.webOnly ? 'in the browser console' : 'below';\n Log.log(\n chalk`Logs for your project will appear ${logLocation}.${\n isInteractive() ? chalk.dim(` Press Ctrl+C to exit.`) : ''\n }`\n );\n}\n\nasync function trackAsync(projectRoot: string, exp: ExpoConfig): Promise<void> {\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n installExitHooks(async () => {\n await logEventAsync('dev client start command', {\n status: 'finished',\n ...getDevClientProperties(projectRoot, exp),\n });\n // UnifiedAnalytics.flush();\n });\n}\n"],"names":["startAsync","getMultiBundlerStartOptions","projectRoot","options","settings","platformBundlers","commonOptions","mode","dev","devClient","privateKeyPath","undefined","https","maxWorkers","resetDevServer","clear","minify","location","hostType","host","scheme","multiBundlerSettings","resolvePortsAsync","optionalBundlers","web","bundlers","Set","Object","values","multiBundlerStartOptions","map","bundler","port","webpackPort","metroPort","type","exp","Log","log","chalk","gray","setNodeEnv","require","load","pkg","profile","getConfig","platforms","includes","process","platform","getXcodeVersionAsync","silent","SimulatorAppPrerequisite","instance","assertAsync","catch","getPlatformBundlers","defaultOptions","startOptions","devServerManager","DevServerManager","webOnly","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","bind","watchEnvironmentVariables","bootstrapTypeScriptAsync","validateDependenciesVersionsAsync","trackAsync","openPlatformsAsync","isInteractive","startInterfaceAsync","url","getDefaultDevServer","getDevServerUrl","logLocation","dim","logEventAsync","status","getDevClientProperties","installExitHooks"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/start/startAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { SimulatorAppPrerequisite } from './doctor/apple/SimulatorAppPrerequisite';\nimport { getXcodeVersionAsync } from './doctor/apple/XcodePrerequisite';\nimport { validateDependenciesVersionsAsync } from './doctor/dependencies/validateDependenciesVersions';\nimport { WebSupportProjectPrerequisite } from './doctor/web/WebSupportProjectPrerequisite';\nimport { startInterfaceAsync } from './interface/startInterface';\nimport { Options, resolvePortsAsync } from './resolveOptions';\nimport { BundlerStartOptions } from './server/BundlerDevServer';\nimport { DevServerManager, MultiBundlerStartOptions } from './server/DevServerManager';\nimport { openPlatformsAsync } from './server/openPlatforms';\nimport { getPlatformBundlers, PlatformBundlers } from './server/platformBundlers';\nimport * as Log from '../log';\nimport getDevClientProperties from '../utils/analytics/getDevClientProperties';\nimport { env } from '../utils/env';\nimport { installExitHooks } from '../utils/exit';\nimport { isInteractive } from '../utils/interactive';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { profile } from '../utils/profile';\nimport { logEventAsync } from '../utils/telemetry';\n\nasync function getMultiBundlerStartOptions(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean },\n platformBundlers: PlatformBundlers\n): Promise<[BundlerStartOptions, MultiBundlerStartOptions]> {\n const commonOptions: BundlerStartOptions = {\n mode: options.dev ? 'development' : 'production',\n devClient: options.devClient,\n privateKeyPath: options.privateKeyPath ?? undefined,\n https: options.https,\n maxWorkers: options.maxWorkers,\n resetDevServer: options.clear,\n minify: options.minify,\n location: {\n hostType: options.host,\n scheme: options.scheme,\n },\n };\n const multiBundlerSettings = await resolvePortsAsync(projectRoot, options, settings);\n\n const optionalBundlers: Partial<PlatformBundlers> = { ...platformBundlers };\n // In the default case, we don't want to start multiple bundlers since this is\n // a bit slower. Our priority (for legacy) is native platforms.\n if (!options.web) {\n delete optionalBundlers['web'];\n }\n\n const bundlers = [...new Set(Object.values(optionalBundlers))];\n const multiBundlerStartOptions = bundlers.map((bundler) => {\n const port =\n bundler === 'webpack' ? multiBundlerSettings.webpackPort : multiBundlerSettings.metroPort;\n return {\n type: bundler,\n options: {\n ...commonOptions,\n port,\n },\n };\n });\n\n return [commonOptions, multiBundlerStartOptions];\n}\n\nexport async function startAsync(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean }\n) {\n Log.log(chalk.gray(`Starting project at ${projectRoot}`));\n\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n const { exp, pkg } = profile(getConfig)(projectRoot);\n\n if (exp.platforms?.includes('ios') && process.platform !== 'win32') {\n // If Xcode could potentially be used, then we should eagerly perform the\n // assertions since they can take a while on cold boots.\n getXcodeVersionAsync({ silent: true });\n SimulatorAppPrerequisite.instance.assertAsync().catch(() => {\n // noop -- this will be thrown again when the user attempts to open the project.\n });\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(\n projectRoot,\n options,\n settings,\n platformBundlers\n );\n\n const devServerManager = new DevServerManager(projectRoot, defaultOptions);\n\n // Validations\n\n if (options.web || settings.webOnly) {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n }\n\n // Start the server as soon as possible.\n await profile(devServerManager.startAsync.bind(devServerManager))(startOptions);\n\n if (!settings.webOnly) {\n await devServerManager.watchEnvironmentVariables();\n\n // After the server starts, we can start attempting to bootstrap TypeScript.\n await devServerManager.bootstrapTypeScriptAsync();\n }\n\n if (!settings.webOnly && !options.devClient) {\n await profile(validateDependenciesVersionsAsync)(projectRoot, exp, pkg);\n }\n\n // Some tracking thing\n\n if (options.devClient) {\n await trackAsync(projectRoot, exp);\n }\n\n // Open project on devices.\n await profile(openPlatformsAsync)(devServerManager, options);\n\n // Present the Terminal UI.\n if (isInteractive()) {\n await profile(startInterfaceAsync)(devServerManager, {\n platforms: exp.platforms ?? ['ios', 'android', 'web'],\n });\n } else {\n // Display the server location in CI...\n const url = devServerManager.getDefaultDevServer()?.getDevServerUrl();\n if (url) {\n if (env.__EXPO_E2E_TEST) {\n // Print the URL to stdout for tests\n console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({ url })}`);\n }\n Log.log(chalk`Waiting on {underline ${url}}`);\n }\n }\n\n // Final note about closing the server.\n const logLocation = settings.webOnly ? 'in the browser console' : 'below';\n Log.log(\n chalk`Logs for your project will appear ${logLocation}.${\n isInteractive() ? chalk.dim(` Press Ctrl+C to exit.`) : ''\n }`\n );\n}\n\nasync function trackAsync(projectRoot: string, exp: ExpoConfig): Promise<void> {\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n installExitHooks(async () => {\n await logEventAsync('dev client start command', {\n status: 'finished',\n ...getDevClientProperties(projectRoot, exp),\n });\n // UnifiedAnalytics.flush();\n });\n}\n"],"names":["startAsync","getMultiBundlerStartOptions","projectRoot","options","settings","platformBundlers","commonOptions","mode","dev","devClient","privateKeyPath","undefined","https","maxWorkers","resetDevServer","clear","minify","location","hostType","host","scheme","multiBundlerSettings","resolvePortsAsync","optionalBundlers","web","bundlers","Set","Object","values","multiBundlerStartOptions","map","bundler","port","webpackPort","metroPort","type","exp","Log","log","chalk","gray","setNodeEnv","require","load","pkg","profile","getConfig","platforms","includes","process","platform","getXcodeVersionAsync","silent","SimulatorAppPrerequisite","instance","assertAsync","catch","getPlatformBundlers","defaultOptions","startOptions","devServerManager","DevServerManager","webOnly","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","bind","watchEnvironmentVariables","bootstrapTypeScriptAsync","validateDependenciesVersionsAsync","trackAsync","openPlatformsAsync","isInteractive","startInterfaceAsync","url","getDefaultDevServer","getDevServerUrl","env","__EXPO_E2E_TEST","console","info","JSON","stringify","logLocation","dim","logEventAsync","status","getDevClientProperties","installExitHooks"],"mappings":"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"}
@@ -145,6 +145,9 @@ class Env {
145
145
  /** Set the default `user` that should be passed to `--user` with ADB commands. Used for installing APKs on Android devices with multiple profiles. Defaults to `0`. */ get EXPO_ADB_USER() {
146
146
  return (0, _getenv().string)("EXPO_ADB_USER", "0");
147
147
  }
148
+ /** Used internally to enable E2E utilities. This behavior is not stable to external users. */ get __EXPO_E2E_TEST() {
149
+ return (0, _getenv().boolish)("__EXPO_E2E_TEST", false);
150
+ }
148
151
  /** Unstable: Force single-bundle exports in production. */ get EXPO_NO_BUNDLE_SPLITTING() {
149
152
  return (0, _getenv().boolish)("EXPO_NO_BUNDLE_SPLITTING", false);
150
153
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Disable all network requests */\n get EXPO_OFFLINE() {\n return boolish('EXPO_OFFLINE', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** Disable detaching telemetry to separate process */\n get EXPO_NO_TELEMETRY_DETACH() {\n return boolish('EXPO_NO_TELEMETRY_DETACH', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', false);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Disable the app select redirect page. */\n get EXPO_NO_REDIRECT_PAGE() {\n return boolish('EXPO_NO_REDIRECT_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN', '');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /** Enable auto server root detection for Metro. This will change the server root to the workspace root. */\n get EXPO_USE_METRO_WORKSPACE_ROOT(): boolean {\n return boolish('EXPO_USE_METRO_WORKSPACE_ROOT', false);\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * **Experimental** - Disable using `exp.direct` as the hostname for\n * `--tunnel` connections. This enables **https://** forwarding which\n * can be used to test universal links on iOS.\n *\n * This may cause issues with `expo-linking` and Expo Go.\n *\n * Select the exact subdomain by passing a string value that is not one of: `true`, `false`, `1`, `0`.\n */\n get EXPO_TUNNEL_SUBDOMAIN(): string | boolean {\n const subdomain = string('EXPO_TUNNEL_SUBDOMAIN', '');\n if (['0', 'false', ''].includes(subdomain)) {\n return false;\n } else if (['1', 'true'].includes(subdomain)) {\n return true;\n }\n return subdomain;\n }\n\n /**\n * Force Expo CLI to use the [`resolver.resolverMainFields`](https://facebook.github.io/metro/docs/configuration/#resolvermainfields) from the project `metro.config.js` for all platforms.\n *\n * By default, Expo CLI will use `['browser', 'module', 'main']` (default for Webpack) for web and the user-defined main fields for other platforms.\n */\n get EXPO_METRO_NO_MAIN_FIELD_OVERRIDE(): boolean {\n return boolish('EXPO_METRO_NO_MAIN_FIELD_OVERRIDE', false);\n }\n\n /**\n * HTTP/HTTPS proxy to connect to for network requests. Configures [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent).\n */\n get HTTP_PROXY(): string {\n return process.env.HTTP_PROXY || process.env.http_proxy || '';\n }\n\n /**\n * Use the network inspector by overriding the metro inspector proxy with a custom version.\n * @deprecated This has been replaced by `@react-native/dev-middleware` and is now unused.\n */\n get EXPO_NO_INSPECTOR_PROXY(): boolean {\n return boolish('EXPO_NO_INSPECTOR_PROXY', false);\n }\n\n /** Disable lazy bundling in Metro bundler. */\n get EXPO_NO_METRO_LAZY() {\n return boolish('EXPO_NO_METRO_LAZY', false);\n }\n\n /** Enable the unstable inverse dependency stack trace for Metro bundling errors. */\n get EXPO_METRO_UNSTABLE_ERRORS() {\n return boolish('EXPO_METRO_UNSTABLE_ERRORS', false);\n }\n\n /** Enable the unstable fast resolver for Metro. */\n get EXPO_USE_FAST_RESOLVER() {\n return boolish('EXPO_USE_FAST_RESOLVER', false);\n }\n\n /** Disable Environment Variable injection in client bundles. */\n get EXPO_NO_CLIENT_ENV_VARS(): boolean {\n return boolish('EXPO_NO_CLIENT_ENV_VARS', false);\n }\n\n /** Enable the React Native JS Inspector, instead of the \"classic\" Chrome DevTools (SDK <=49) */\n get EXPO_USE_UNSTABLE_DEBUGGER(): boolean {\n return boolish('EXPO_USE_UNSTABLE_DEBUGGER', false);\n }\n\n /** Set the default `user` that should be passed to `--user` with ADB commands. Used for installing APKs on Android devices with multiple profiles. Defaults to `0`. */\n get EXPO_ADB_USER(): string {\n return string('EXPO_ADB_USER', '0');\n }\n\n /** Unstable: Force single-bundle exports in production. */\n get EXPO_NO_BUNDLE_SPLITTING(): boolean {\n return boolish('EXPO_NO_BUNDLE_SPLITTING', false);\n }\n\n /** Enable unstable/experimental Atlas to gather bundle information during development or export */\n get EXPO_UNSTABLE_ATLAS() {\n return boolish('EXPO_UNSTABLE_ATLAS', false);\n }\n}\n\nexport const env = new Env();\n"],"names":["env","Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_OFFLINE","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_NO_TELEMETRY_DETACH","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_NO_REDIRECT_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_USE_METRO_WORKSPACE_ROOT","EXPO_PACKAGER_PROXY_URL","EXPO_TUNNEL_SUBDOMAIN","subdomain","includes","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","HTTP_PROXY","process","http_proxy","EXPO_NO_INSPECTOR_PROXY","EXPO_NO_METRO_LAZY","EXPO_METRO_UNSTABLE_ERRORS","EXPO_USE_FAST_RESOLVER","EXPO_NO_CLIENT_ENV_VARS","EXPO_USE_UNSTABLE_DEBUGGER","EXPO_ADB_USER","EXPO_NO_BUNDLE_SPLITTING","EXPO_UNSTABLE_ATLAS"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Disable all network requests */\n get EXPO_OFFLINE() {\n return boolish('EXPO_OFFLINE', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** Disable detaching telemetry to separate process */\n get EXPO_NO_TELEMETRY_DETACH() {\n return boolish('EXPO_NO_TELEMETRY_DETACH', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', false);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Disable the app select redirect page. */\n get EXPO_NO_REDIRECT_PAGE() {\n return boolish('EXPO_NO_REDIRECT_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN', '');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /** Enable auto server root detection for Metro. This will change the server root to the workspace root. */\n get EXPO_USE_METRO_WORKSPACE_ROOT(): boolean {\n return boolish('EXPO_USE_METRO_WORKSPACE_ROOT', false);\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * **Experimental** - Disable using `exp.direct` as the hostname for\n * `--tunnel` connections. This enables **https://** forwarding which\n * can be used to test universal links on iOS.\n *\n * This may cause issues with `expo-linking` and Expo Go.\n *\n * Select the exact subdomain by passing a string value that is not one of: `true`, `false`, `1`, `0`.\n */\n get EXPO_TUNNEL_SUBDOMAIN(): string | boolean {\n const subdomain = string('EXPO_TUNNEL_SUBDOMAIN', '');\n if (['0', 'false', ''].includes(subdomain)) {\n return false;\n } else if (['1', 'true'].includes(subdomain)) {\n return true;\n }\n return subdomain;\n }\n\n /**\n * Force Expo CLI to use the [`resolver.resolverMainFields`](https://facebook.github.io/metro/docs/configuration/#resolvermainfields) from the project `metro.config.js` for all platforms.\n *\n * By default, Expo CLI will use `['browser', 'module', 'main']` (default for Webpack) for web and the user-defined main fields for other platforms.\n */\n get EXPO_METRO_NO_MAIN_FIELD_OVERRIDE(): boolean {\n return boolish('EXPO_METRO_NO_MAIN_FIELD_OVERRIDE', false);\n }\n\n /**\n * HTTP/HTTPS proxy to connect to for network requests. Configures [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent).\n */\n get HTTP_PROXY(): string {\n return process.env.HTTP_PROXY || process.env.http_proxy || '';\n }\n\n /**\n * Use the network inspector by overriding the metro inspector proxy with a custom version.\n * @deprecated This has been replaced by `@react-native/dev-middleware` and is now unused.\n */\n get EXPO_NO_INSPECTOR_PROXY(): boolean {\n return boolish('EXPO_NO_INSPECTOR_PROXY', false);\n }\n\n /** Disable lazy bundling in Metro bundler. */\n get EXPO_NO_METRO_LAZY() {\n return boolish('EXPO_NO_METRO_LAZY', false);\n }\n\n /** Enable the unstable inverse dependency stack trace for Metro bundling errors. */\n get EXPO_METRO_UNSTABLE_ERRORS() {\n return boolish('EXPO_METRO_UNSTABLE_ERRORS', false);\n }\n\n /** Enable the unstable fast resolver for Metro. */\n get EXPO_USE_FAST_RESOLVER() {\n return boolish('EXPO_USE_FAST_RESOLVER', false);\n }\n\n /** Disable Environment Variable injection in client bundles. */\n get EXPO_NO_CLIENT_ENV_VARS(): boolean {\n return boolish('EXPO_NO_CLIENT_ENV_VARS', false);\n }\n\n /** Enable the React Native JS Inspector, instead of the \"classic\" Chrome DevTools (SDK <=49) */\n get EXPO_USE_UNSTABLE_DEBUGGER(): boolean {\n return boolish('EXPO_USE_UNSTABLE_DEBUGGER', false);\n }\n\n /** Set the default `user` that should be passed to `--user` with ADB commands. Used for installing APKs on Android devices with multiple profiles. Defaults to `0`. */\n get EXPO_ADB_USER(): string {\n return string('EXPO_ADB_USER', '0');\n }\n\n /** Used internally to enable E2E utilities. This behavior is not stable to external users. */\n get __EXPO_E2E_TEST(): boolean {\n return boolish('__EXPO_E2E_TEST', false);\n }\n\n /** Unstable: Force single-bundle exports in production. */\n get EXPO_NO_BUNDLE_SPLITTING(): boolean {\n return boolish('EXPO_NO_BUNDLE_SPLITTING', false);\n }\n\n /** Enable unstable/experimental Atlas to gather bundle information during development or export */\n get EXPO_UNSTABLE_ATLAS() {\n return boolish('EXPO_UNSTABLE_ATLAS', false);\n }\n}\n\nexport const env = new Env();\n"],"names":["env","Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_OFFLINE","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_NO_TELEMETRY_DETACH","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_NO_REDIRECT_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_USE_METRO_WORKSPACE_ROOT","EXPO_PACKAGER_PROXY_URL","EXPO_TUNNEL_SUBDOMAIN","subdomain","includes","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","HTTP_PROXY","process","http_proxy","EXPO_NO_INSPECTOR_PROXY","EXPO_NO_METRO_LAZY","EXPO_METRO_UNSTABLE_ERRORS","EXPO_USE_FAST_RESOLVER","EXPO_NO_CLIENT_ENV_VARS","EXPO_USE_UNSTABLE_DEBUGGER","EXPO_ADB_USER","__EXPO_E2E_TEST","EXPO_NO_BUNDLE_SPLITTING","EXPO_UNSTABLE_ATLAS"],"mappings":"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"}
@@ -79,7 +79,7 @@ function getContext() {
79
79
  cpu: summarizeCpuInfo(),
80
80
  app: {
81
81
  name: "expo/cli",
82
- version: "0.18.8"
82
+ version: "0.18.10"
83
83
  },
84
84
  ci: _ciInfo().isCI ? {
85
85
  name: _ciInfo().name,