@expo/cli 0.13.2 → 0.14.0
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.
- package/build/bin/cli +27 -25
- package/build/bin/cli.map +1 -1
- package/build/src/config/configAsync.js +1 -1
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js +2 -2
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/generate.js +1 -1
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/typescript.js +3 -3
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/index.js +4 -4
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/exportApp.js +6 -4
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportHermes.js +20 -10
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +55 -39
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +44 -13
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +2 -2
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/web/index.js +2 -2
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/export/writeContents.js +3 -1
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/installAsync.js +1 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/login/index.js +1 -1
- package/build/src/login/index.js.map +1 -1
- package/build/src/logout/index.js +1 -1
- package/build/src/logout/index.js.map +1 -1
- package/build/src/prebuild/index.js +3 -3
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +2 -2
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/register/index.js +1 -1
- package/build/src/register/index.js.map +1 -1
- package/build/src/run/android/index.js +2 -2
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +35 -2
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/index.js +2 -2
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/start/index.js +3 -3
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +4 -1
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +29 -10
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/bundleApiRoutes.js +0 -16
- package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +170 -0
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -0
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/formatFileCandidates.js +72 -0
- package/build/src/start/server/metro/formatFileCandidates.js.map +1 -0
- package/build/src/start/server/metro/instantiateMetro.js +6 -7
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +2 -1
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/router.js +2 -2
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +31 -14
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +43 -15
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +1 -1
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +1 -0
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/cocoapods.js +1 -0
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/env.js +3 -0
- package/build/src/utils/env.js.map +1 -1
- package/build/src/whoami/index.js +1 -1
- package/build/src/whoami/index.js.map +1 -1
- package/package.json +7 -8
- package/static/shims/react-native-web/dist/cjs/exports/BackHandler/index.js +10 -0
- package/static/shims/react-native-web/dist/exports/BackHandler/index.js +7 -0
- package/build/src/export/createBundles.js +0 -37
- package/build/src/export/createBundles.js.map +0 -1
- package/build/src/start/server/middleware/resolveEntryPoint.js +0 -42
- package/build/src/start/server/middleware/resolveEntryPoint.js.map +0 -1
|
@@ -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 { delayAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\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\n/** @returns a list of connected Apple devices. */\nexport async function getConnectedDevicesAsync(): 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 };\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 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, { appInfo, detach: !waitForApp });\n if (waitForApp) {\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 launchApp(\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"],"names":["getConnectedDevicesAsync","runOnDevice","debug","Debug","client","UsbmuxdClient","connectUsbmuxdSocket","devices","getDevices","socket","end","Promise","all","map","device","connect","deviceValues","LockdowndClient","getAllValues","name","DeviceName","ProductType","model","osVersion","ProductVersion","deviceType","connectionType","Properties","ConnectionType","udid","SerialNumber","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","tries","getDebugserverClient","setMaxPacketSize","setWorkingDir","Container","Path","CFBundleExecutable","checkLaunchSuccess","res","sendCommand","console","CommandError"],"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 { xcrunAsync } from '../../../start/platforms/ios/xcrun';\nimport { delayAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\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\n/** @returns a list of connected Apple devices. */\nexport async function getConnectedDevicesAsync(): 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 };\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 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\nasync function launchAppWithDeviceCtl(deviceId: string, bundleId: string) {\n await xcrunAsync(['devicectl', 'device', 'process', 'launch', '--device', deviceId, bundleId]);\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","client","UsbmuxdClient","connectUsbmuxdSocket","devices","getDevices","socket","end","Promise","all","map","device","connect","deviceValues","LockdowndClient","getAllValues","name","DeviceName","ProductType","model","osVersion","ProductVersion","deviceType","connectionType","Properties","ConnectionType","udid","SerialNumber","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","launchAppWithDeviceCtl","deviceId","xcrunAsync","error"],"mappings":"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"}
|
|
@@ -71,7 +71,7 @@ const expoRunIos = async (argv)=>{
|
|
|
71
71
|
].join("\n"));
|
|
72
72
|
}
|
|
73
73
|
const { resolveStringOrBooleanArgsAsync } = await Promise.resolve().then(function() {
|
|
74
|
-
return _interopRequireWildcard(require("../../utils/resolveArgs"));
|
|
74
|
+
return _interopRequireWildcard(require("../../utils/resolveArgs.js"));
|
|
75
75
|
});
|
|
76
76
|
const parsed = await resolveStringOrBooleanArgsAsync(argv != null ? argv : [], rawArgsMap, {
|
|
77
77
|
"--scheme": Boolean,
|
|
@@ -79,7 +79,7 @@ const expoRunIos = async (argv)=>{
|
|
|
79
79
|
"-d": "--device"
|
|
80
80
|
}).catch(_errors.logCmdError);
|
|
81
81
|
const { runIosAsync } = await Promise.resolve().then(function() {
|
|
82
|
-
return _interopRequireWildcard(require("./runIosAsync"));
|
|
82
|
+
return _interopRequireWildcard(require("./runIosAsync.js"));
|
|
83
83
|
});
|
|
84
84
|
return runIosAsync(_path.default.resolve(parsed.projectRoot), {
|
|
85
85
|
// Parsed options
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/run/ios/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { XcodeConfiguration } from './XcodeBuild.types';\nimport { Command } from '../../../bin/cli';\nimport { assertWithOptionsArgs, printHelp } from '../../utils/args';\nimport { logCmdError } from '../../utils/errors';\n\nexport const expoRunIos: Command = async (argv) => {\n const rawArgsMap: arg.Spec = {\n // Types\n '--help': Boolean,\n '--no-build-cache': Boolean,\n '--no-install': Boolean,\n '--no-bundler': Boolean,\n '--configuration': String,\n\n '--port': Number,\n // Aliases\n '-p': '--port',\n\n '-h': '--help',\n };\n const args = assertWithOptionsArgs(rawArgsMap, {\n argv,\n\n permissive: true,\n });\n\n // '-d' -> '--device': Boolean,\n // '--scheme': String,\n\n if (args['--help']) {\n printHelp(\n `Run the iOS app binary locally`,\n `npx expo run:ios`,\n [\n `--no-build-cache Clear the native derived data before building`,\n `--no-install Skip installing dependencies`,\n `--no-bundler Skip starting the Metro bundler`,\n `--scheme [scheme] Scheme to build`,\n chalk`--configuration <configuration> Xcode configuration to use. Debug or Release. {dim Default: Debug}`,\n `-d, --device [device] Device name or UDID to build the app on`,\n chalk`-p, --port <port> Port to start the Metro bundler on. {dim Default: 8081}`,\n `-h, --help Usage info`,\n ].join('\\n'),\n [\n '',\n chalk` Build for production (unsigned) with the {bold Release} configuration:`,\n chalk` {dim $} npx expo run:ios --configuration Release`,\n '',\n ].join('\\n')\n );\n }\n\n const { resolveStringOrBooleanArgsAsync } = await import('../../utils/resolveArgs');\n const parsed = await resolveStringOrBooleanArgsAsync(argv ?? [], rawArgsMap, {\n '--scheme': Boolean,\n '--device': Boolean,\n '-d': '--device',\n }).catch(logCmdError);\n\n const { runIosAsync } = await import('./runIosAsync');\n return runIosAsync(path.resolve(parsed.projectRoot), {\n // Parsed options\n buildCache: !args['--no-build-cache'],\n install: !args['--no-install'],\n bundler: !args['--no-bundler'],\n port: args['--port'],\n\n // Custom parsed args\n device: parsed.args['--device'],\n scheme: parsed.args['--scheme'],\n configuration: parsed.args['--configuration'] as XcodeConfiguration,\n }).catch(logCmdError);\n};\n"],"names":["expoRunIos","argv","rawArgsMap","Boolean","String","Number","args","assertWithOptionsArgs","permissive","printHelp","chalk","join","resolveStringOrBooleanArgsAsync","parsed","catch","logCmdError","runIosAsync","path","resolve","projectRoot","buildCache","install","bundler","port","device","scheme","configuration"],"mappings":"AAAA;;;;;;AAEkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACR,IAAA,KAAM,kCAAN,MAAM,EAAA;AAI0B,IAAA,KAAkB,WAAlB,kBAAkB,CAAA;AACvC,IAAA,OAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,UAAU,GAAa;QAC3B,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,kBAAkB,EAAEA,OAAO;QAC3B,cAAc,EAAEA,OAAO;QACvB,cAAc,EAAEA,OAAO;QACvB,iBAAiB,EAAEC,MAAM;QAEzB,QAAQ,EAAEC,MAAM;QAChB,UAAU;QACV,IAAI,EAAE,QAAQ;QAEd,IAAI,EAAE,QAAQ;KACf,AAAC;IACF,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAqB,AAIhC,CAAA,sBAJgC,CAACL,UAAU,EAAE;QAC7CD,IAAI;QAEJO,UAAU,EAAE,IAAI;KACjB,CAAC,AAAC;IAEH,+BAA+B;IAC/B,sBAAsB;IAEtB,IAAIF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBG,CAAAA,GAAAA,KAAS,AAmBR,CAAA,UAnBQ,CACP,CAAC,8BAA8B,CAAC,EAChC,CAAC,gBAAgB,CAAC,EAClB;YACE,CAAC,8EAA8E,CAAC;YAChF,CAAC,6DAA6D,CAAC;YAC/D,CAAC,gEAAgE,CAAC;YAClE,CAAC,gDAAgD,CAAC;YAClDC,MAAK,QAAA,CAAC,mGAAmG,CAAC;YAC1G,CAAC,wEAAwE,CAAC;YAC1EA,MAAK,QAAA,CAAC,wFAAwF,CAAC;YAC/F,CAAC,2CAA2C,CAAC;SAC9C,CAACC,IAAI,CAAC,IAAI,CAAC,EACZ;YACE,EAAE;YACFD,MAAK,QAAA,CAAC,wEAAwE,CAAC;YAC/EA,MAAK,QAAA,CAAC,oDAAoD,CAAC;YAC3D,EAAE;SACH,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,MAAM,EAAEC,+BAA+B,CAAA,EAAE,GAAG,MAAM;+CAAO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/run/ios/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { XcodeConfiguration } from './XcodeBuild.types';\nimport { Command } from '../../../bin/cli';\nimport { assertWithOptionsArgs, printHelp } from '../../utils/args';\nimport { logCmdError } from '../../utils/errors';\n\nexport const expoRunIos: Command = async (argv) => {\n const rawArgsMap: arg.Spec = {\n // Types\n '--help': Boolean,\n '--no-build-cache': Boolean,\n '--no-install': Boolean,\n '--no-bundler': Boolean,\n '--configuration': String,\n\n '--port': Number,\n // Aliases\n '-p': '--port',\n\n '-h': '--help',\n };\n const args = assertWithOptionsArgs(rawArgsMap, {\n argv,\n\n permissive: true,\n });\n\n // '-d' -> '--device': Boolean,\n // '--scheme': String,\n\n if (args['--help']) {\n printHelp(\n `Run the iOS app binary locally`,\n `npx expo run:ios`,\n [\n `--no-build-cache Clear the native derived data before building`,\n `--no-install Skip installing dependencies`,\n `--no-bundler Skip starting the Metro bundler`,\n `--scheme [scheme] Scheme to build`,\n chalk`--configuration <configuration> Xcode configuration to use. Debug or Release. {dim Default: Debug}`,\n `-d, --device [device] Device name or UDID to build the app on`,\n chalk`-p, --port <port> Port to start the Metro bundler on. {dim Default: 8081}`,\n `-h, --help Usage info`,\n ].join('\\n'),\n [\n '',\n chalk` Build for production (unsigned) with the {bold Release} configuration:`,\n chalk` {dim $} npx expo run:ios --configuration Release`,\n '',\n ].join('\\n')\n );\n }\n\n const { resolveStringOrBooleanArgsAsync } = await import('../../utils/resolveArgs.js');\n const parsed = await resolveStringOrBooleanArgsAsync(argv ?? [], rawArgsMap, {\n '--scheme': Boolean,\n '--device': Boolean,\n '-d': '--device',\n }).catch(logCmdError);\n\n const { runIosAsync } = await import('./runIosAsync.js');\n return runIosAsync(path.resolve(parsed.projectRoot), {\n // Parsed options\n buildCache: !args['--no-build-cache'],\n install: !args['--no-install'],\n bundler: !args['--no-bundler'],\n port: args['--port'],\n\n // Custom parsed args\n device: parsed.args['--device'],\n scheme: parsed.args['--scheme'],\n configuration: parsed.args['--configuration'] as XcodeConfiguration,\n }).catch(logCmdError);\n};\n"],"names":["expoRunIos","argv","rawArgsMap","Boolean","String","Number","args","assertWithOptionsArgs","permissive","printHelp","chalk","join","resolveStringOrBooleanArgsAsync","parsed","catch","logCmdError","runIosAsync","path","resolve","projectRoot","buildCache","install","bundler","port","device","scheme","configuration"],"mappings":"AAAA;;;;;;AAEkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACR,IAAA,KAAM,kCAAN,MAAM,EAAA;AAI0B,IAAA,KAAkB,WAAlB,kBAAkB,CAAA;AACvC,IAAA,OAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,UAAU,GAAa;QAC3B,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,kBAAkB,EAAEA,OAAO;QAC3B,cAAc,EAAEA,OAAO;QACvB,cAAc,EAAEA,OAAO;QACvB,iBAAiB,EAAEC,MAAM;QAEzB,QAAQ,EAAEC,MAAM;QAChB,UAAU;QACV,IAAI,EAAE,QAAQ;QAEd,IAAI,EAAE,QAAQ;KACf,AAAC;IACF,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAqB,AAIhC,CAAA,sBAJgC,CAACL,UAAU,EAAE;QAC7CD,IAAI;QAEJO,UAAU,EAAE,IAAI;KACjB,CAAC,AAAC;IAEH,+BAA+B;IAC/B,sBAAsB;IAEtB,IAAIF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBG,CAAAA,GAAAA,KAAS,AAmBR,CAAA,UAnBQ,CACP,CAAC,8BAA8B,CAAC,EAChC,CAAC,gBAAgB,CAAC,EAClB;YACE,CAAC,8EAA8E,CAAC;YAChF,CAAC,6DAA6D,CAAC;YAC/D,CAAC,gEAAgE,CAAC;YAClE,CAAC,gDAAgD,CAAC;YAClDC,MAAK,QAAA,CAAC,mGAAmG,CAAC;YAC1G,CAAC,wEAAwE,CAAC;YAC1EA,MAAK,QAAA,CAAC,wFAAwF,CAAC;YAC/F,CAAC,2CAA2C,CAAC;SAC9C,CAACC,IAAI,CAAC,IAAI,CAAC,EACZ;YACE,EAAE;YACFD,MAAK,QAAA,CAAC,wEAAwE,CAAC;YAC/EA,MAAK,QAAA,CAAC,oDAAoD,CAAC;YAC3D,EAAE;SACH,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,MAAM,EAAEC,+BAA+B,CAAA,EAAE,GAAG,MAAM;+CAAO,4BAA4B;MAAC,AAAC;IACvF,MAAMC,MAAM,GAAG,MAAMD,+BAA+B,CAACX,IAAI,WAAJA,IAAI,GAAI,EAAE,EAAEC,UAAU,EAAE;QAC3E,UAAU,EAAEC,OAAO;QACnB,UAAU,EAAEA,OAAO;QACnB,IAAI,EAAE,UAAU;KACjB,CAAC,CAACW,KAAK,CAACC,OAAW,YAAA,CAAC,AAAC;IAEtB,MAAM,EAAEC,WAAW,CAAA,EAAE,GAAG,MAAM;+CAAO,kBAAkB;MAAC,AAAC;IACzD,OAAOA,WAAW,CAACC,KAAI,QAAA,CAACC,OAAO,CAACL,MAAM,CAACM,WAAW,CAAC,EAAE;QACnD,iBAAiB;QACjBC,UAAU,EAAE,CAACd,IAAI,CAAC,kBAAkB,CAAC;QACrCe,OAAO,EAAE,CAACf,IAAI,CAAC,cAAc,CAAC;QAC9BgB,OAAO,EAAE,CAAChB,IAAI,CAAC,cAAc,CAAC;QAC9BiB,IAAI,EAAEjB,IAAI,CAAC,QAAQ,CAAC;QAEpB,qBAAqB;QACrBkB,MAAM,EAAEX,MAAM,CAACP,IAAI,CAAC,UAAU,CAAC;QAC/BmB,MAAM,EAAEZ,MAAM,CAACP,IAAI,CAAC,UAAU,CAAC;QAC/BoB,aAAa,EAAEb,MAAM,CAACP,IAAI,CAAC,iBAAiB,CAAC;KAC9C,CAAC,CAACQ,KAAK,CAACC,OAAW,YAAA,CAAC,CAAC;CACvB,AAAC;QAnEWf,UAAU,GAAVA,UAAU"}
|
package/build/src/start/index.js
CHANGED
|
@@ -102,17 +102,17 @@ const expoStart = async (argv)=>{
|
|
|
102
102
|
}
|
|
103
103
|
const projectRoot = (0, _args).getProjectRoot(args);
|
|
104
104
|
const { resolveOptionsAsync } = await Promise.resolve().then(function() {
|
|
105
|
-
return _interopRequireWildcard(require("./resolveOptions"));
|
|
105
|
+
return _interopRequireWildcard(require("./resolveOptions.js"));
|
|
106
106
|
});
|
|
107
107
|
const options = await resolveOptionsAsync(projectRoot, args).catch(_errors.logCmdError);
|
|
108
108
|
if (options.offline) {
|
|
109
109
|
const { disableNetwork } = await Promise.resolve().then(function() {
|
|
110
|
-
return _interopRequireWildcard(require("../api/settings"));
|
|
110
|
+
return _interopRequireWildcard(require("../api/settings.js"));
|
|
111
111
|
});
|
|
112
112
|
disableNetwork();
|
|
113
113
|
}
|
|
114
114
|
const { startAsync } = await Promise.resolve().then(function() {
|
|
115
|
-
return _interopRequireWildcard(require("./startAsync"));
|
|
115
|
+
return _interopRequireWildcard(require("./startAsync.js"));
|
|
116
116
|
});
|
|
117
117
|
return startAsync(projectRoot, options, {
|
|
118
118
|
webOnly: false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/start/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoStart: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--max-workers': Number,\n '--no-dev': Boolean,\n '--minify': Boolean,\n '--https': Boolean,\n '--private-key-path': String,\n '--port': Number,\n '--dev-client': Boolean,\n '--scheme': String,\n '--android': Boolean,\n '--ios': Boolean,\n '--web': Boolean,\n '--host': String,\n '--tunnel': Boolean,\n '--lan': Boolean,\n '--localhost': Boolean,\n '--offline': Boolean,\n '--go': Boolean,\n // Aliases\n '-h': '--help',\n '-c': '--clear',\n '-p': '--port',\n '-a': '--android',\n '-i': '--ios',\n '-w': '--web',\n '-m': '--host',\n '-d': '--dev-client',\n '-g': '--go',\n // Alias for adding interop with the Metro docs and RedBox errors.\n '--reset-cache': '--clear',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Start a local dev server for the app`,\n chalk`npx expo start {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n `-a, --android Open on a connected Android device`,\n `-i, --ios Open in an iOS simulator`,\n `-w, --web Open in a web browser`,\n ``,\n chalk`-d, --dev-client Launch in a custom native app`,\n chalk`-g, --go Launch in Expo Go`,\n ``,\n `-c, --clear Clear the bundler cache`,\n `--max-workers <number> Maximum number of tasks to allow Metro to spawn`,\n `--no-dev Bundle in production mode`,\n `--minify Minify JavaScript`,\n ``,\n chalk`-m, --host <string> Dev server hosting type. {dim Default: lan}`,\n chalk` {bold lan}: Use the local network`,\n chalk` {bold tunnel}: Use any network by tunnel through ngrok`,\n chalk` {bold localhost}: Connect to the dev server over localhost`,\n `--tunnel Same as --host tunnel`,\n `--lan Same as --host lan`,\n `--localhost Same as --host localhost`,\n ``,\n `--offline Skip network requests and use anonymous manifest signatures`,\n `--https Start the dev server with https protocol`,\n `--scheme <scheme> Custom URI protocol to use when launching an app`,\n chalk`-p, --port <number> Port to start the dev server on (does not apply to web or tunnel). {dim Default: 8081}`,\n ``,\n chalk`--private-key-path <path> Path to private key for code signing. {dim Default: \"private-key.pem\" in the same directory as the certificate specified by the expo-updates configuration in app.json.}`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n if (options.offline) {\n const { disableNetwork } = await import('../api/settings');\n disableNetwork();\n }\n\n const { startAsync } = await import('./startAsync');\n return startAsync(projectRoot, options, { webOnly: false }).catch(logCmdError);\n};\n"],"names":["expoStart","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","offline","disableNetwork","startAsync","webOnly"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAG6B,IAAA,KAAe,WAAf,eAAe,CAAA;AACzC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,SAAS,GAAY,OAAOC,IAAI,GAAK;IAChD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAU,AAoCtB,CAAA,WApCsB,CACrB;QACE,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,SAAS,EAAEA,OAAO;QAClB,eAAe,EAAEC,MAAM;QACvB,UAAU,EAAED,OAAO;QACnB,UAAU,EAAEA,OAAO;QACnB,SAAS,EAAEA,OAAO;QAClB,oBAAoB,EAAEE,MAAM;QAC5B,QAAQ,EAAED,MAAM;QAChB,cAAc,EAAED,OAAO;QACvB,UAAU,EAAEE,MAAM;QAClB,WAAW,EAAEF,OAAO;QACpB,OAAO,EAAEA,OAAO;QAChB,OAAO,EAAEA,OAAO;QAChB,QAAQ,EAAEE,MAAM;QAChB,UAAU,EAAEF,OAAO;QACnB,OAAO,EAAEA,OAAO;QAChB,aAAa,EAAEA,OAAO;QACtB,WAAW,EAAEA,OAAO;QACpB,MAAM,EAAEA,OAAO;QACf,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,MAAM;QACZ,kEAAkE;QAClE,eAAe,EAAE,SAAS;KAC3B,EACDH,IAAI,CACL,AAAC;IAEF,IAAIC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBK,CAAAA,GAAAA,KAAS,AAiCR,CAAA,UAjCQ,CACP,CAAC,oCAAoC,CAAC,EACtCC,MAAK,QAAA,CAAC,0BAA0B,CAAC,EACjC;YACEA,MAAK,QAAA,CAAC,uGAAuG,CAAC;YAC9G,CAAC,kEAAkE,CAAC;YACpE,CAAC,wDAAwD,CAAC;YAC1D,CAAC,qDAAqD,CAAC;YACvD,CAAC,CAAC;YACFA,MAAK,QAAA,CAAC,6DAA6D,CAAC;YACpEA,MAAK,QAAA,CAAC,iDAAiD,CAAC;YACxD,CAAC,CAAC;YACF,CAAC,uDAAuD,CAAC;YACzD,CAAC,+EAA+E,CAAC;YACjF,CAAC,yDAAyD,CAAC;YAC3D,CAAC,iDAAiD,CAAC;YACnD,CAAC,CAAC;YACFA,MAAK,QAAA,CAAC,2EAA2E,CAAC;YAClFA,MAAK,QAAA,CAAC,iEAAiE,CAAC;YACxEA,MAAK,QAAA,CAAC,sFAAsF,CAAC;YAC7FA,MAAK,QAAA,CAAC,0FAA0F,CAAC;YACjG,CAAC,qDAAqD,CAAC;YACvD,CAAC,kDAAkD,CAAC;YACpD,CAAC,wDAAwD,CAAC;YAC1D,CAAC,CAAC;YACF,CAAC,2FAA2F,CAAC;YAC7F,CAAC,wEAAwE,CAAC;YAC1E,CAAC,gFAAgF,CAAC;YAClFA,MAAK,QAAA,CAAC,sHAAsH,CAAC;YAC7H,CAAC,CAAC;YACFA,MAAK,QAAA,CAAC,wMAAwM,CAAC;YAC/M,CAAC,0CAA0C,CAAC;SAC7C,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,KAAc,AAAM,CAAA,eAAN,CAACT,IAAI,CAAC,AAAC;IACzC,MAAM,EAAEU,mBAAmB,CAAA,EAAE,GAAG,MAAM;+CAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/start/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoStart: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--max-workers': Number,\n '--no-dev': Boolean,\n '--minify': Boolean,\n '--https': Boolean,\n '--private-key-path': String,\n '--port': Number,\n '--dev-client': Boolean,\n '--scheme': String,\n '--android': Boolean,\n '--ios': Boolean,\n '--web': Boolean,\n '--host': String,\n '--tunnel': Boolean,\n '--lan': Boolean,\n '--localhost': Boolean,\n '--offline': Boolean,\n '--go': Boolean,\n // Aliases\n '-h': '--help',\n '-c': '--clear',\n '-p': '--port',\n '-a': '--android',\n '-i': '--ios',\n '-w': '--web',\n '-m': '--host',\n '-d': '--dev-client',\n '-g': '--go',\n // Alias for adding interop with the Metro docs and RedBox errors.\n '--reset-cache': '--clear',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Start a local dev server for the app`,\n chalk`npx expo start {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n `-a, --android Open on a connected Android device`,\n `-i, --ios Open in an iOS simulator`,\n `-w, --web Open in a web browser`,\n ``,\n chalk`-d, --dev-client Launch in a custom native app`,\n chalk`-g, --go Launch in Expo Go`,\n ``,\n `-c, --clear Clear the bundler cache`,\n `--max-workers <number> Maximum number of tasks to allow Metro to spawn`,\n `--no-dev Bundle in production mode`,\n `--minify Minify JavaScript`,\n ``,\n chalk`-m, --host <string> Dev server hosting type. {dim Default: lan}`,\n chalk` {bold lan}: Use the local network`,\n chalk` {bold tunnel}: Use any network by tunnel through ngrok`,\n chalk` {bold localhost}: Connect to the dev server over localhost`,\n `--tunnel Same as --host tunnel`,\n `--lan Same as --host lan`,\n `--localhost Same as --host localhost`,\n ``,\n `--offline Skip network requests and use anonymous manifest signatures`,\n `--https Start the dev server with https protocol`,\n `--scheme <scheme> Custom URI protocol to use when launching an app`,\n chalk`-p, --port <number> Port to start the dev server on (does not apply to web or tunnel). {dim Default: 8081}`,\n ``,\n chalk`--private-key-path <path> Path to private key for code signing. {dim Default: \"private-key.pem\" in the same directory as the certificate specified by the expo-updates configuration in app.json.}`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions.js');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n if (options.offline) {\n const { disableNetwork } = await import('../api/settings.js');\n disableNetwork();\n }\n\n const { startAsync } = await import('./startAsync.js');\n return startAsync(projectRoot, options, { webOnly: false }).catch(logCmdError);\n};\n"],"names":["expoStart","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","offline","disableNetwork","startAsync","webOnly"],"mappings":"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"}
|
|
@@ -86,7 +86,7 @@ async function ensureFileInRootDirectory(projectRoot, otherFile) {
|
|
|
86
86
|
await (0, _delay).delayAsync(50);
|
|
87
87
|
return moduleId;
|
|
88
88
|
}
|
|
89
|
-
async function createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, { dev =false , platform ="web" , minify =false , environment } = {}) {
|
|
89
|
+
async function createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, { dev =false , platform ="web" , minify =false , environment , engine ="hermes" } = {}) {
|
|
90
90
|
const root = (0, _manifestMiddleware).getMetroServerRoot(projectRoot);
|
|
91
91
|
const safeOtherFile = await ensureFileInRootDirectory(projectRoot, absoluteFilePath);
|
|
92
92
|
const serverPath = _path.default.relative(root, safeOtherFile).replace(/\.[jt]sx?$/, ".bundle");
|
|
@@ -95,6 +95,9 @@ async function createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFileP
|
|
|
95
95
|
if (environment) {
|
|
96
96
|
url += `&resolver.environment=${environment}&transform.environment=${environment}`;
|
|
97
97
|
}
|
|
98
|
+
if (engine) {
|
|
99
|
+
url += `&transform.engine=${engine}`;
|
|
100
|
+
}
|
|
98
101
|
return url;
|
|
99
102
|
}
|
|
100
103
|
class MetroNodeError extends Error {
|
|
@@ -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 } from './metro/metroErrorInterface';\nimport { getMetroServerRoot } from './middleware/ManifestMiddleware';\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\nconst debug = require('debug')('expo:start:server:node-renderer') as typeof console.log;\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 = (projectRoot: string): string => {\n const moduleId = resolveFrom.silent(projectRoot, 'expo-router/node/render.js');\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\ntype StaticRenderOptions = {\n // Ensure the style format is `css-xxxx` (prod) instead of `css-view-xxxx` (dev)\n dev?: boolean;\n minify?: boolean;\n platform?: string;\n environment?: 'node';\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. */\nexport async function getStaticRenderFunctionsContentAsync(\n projectRoot: string,\n devServerUrl: string,\n { dev = false, minify = false, environment }: StaticRenderOptions = {}\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const requiredModuleId = getRenderModuleId(root);\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, { dev, minify, environment });\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('../')) {\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 { dev = false, platform = 'web', minify = false, environment }: StaticRenderOptions = {}\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?$/, '.bundle');\n debug('fetching from Metro:', root, serverPath);\n\n let url = `${devServerUrl}/${serverPath}?platform=${platform}&dev=${dev}&minify=${minify}`;\n\n if (environment) {\n url += `&resolver.environment=${environment}&transform.environment=${environment}`;\n }\n return url;\n}\n\nexport class MetroNodeError extends Error {\n constructor(\n message: string,\n public rawObject: any\n ) {\n super(message);\n }\n}\n\nexport async function requireFileContentsWithMetro(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: StaticRenderOptions = {}\n): Promise<string> {\n const url = await createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, props);\n\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 return wrapBundle(content);\n}\n\nexport async function requireWithMetro<T extends Record<string, (...args: any[]) => Promise<any>>>(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n options: StaticRenderOptions = {}\n): Promise<T> {\n const content = await requireFileContentsWithMetro(\n projectRoot,\n devServerUrl,\n absoluteFilePath,\n options\n );\n return evalMetroAndWrapFunctions<T>(projectRoot, content);\n}\n\nexport async function getStaticRenderFunctions(\n projectRoot: string,\n devServerUrl: string,\n options: StaticRenderOptions = {}\n): Promise<Record<string, (...args: any[]) => Promise<any>>> {\n const scriptContents = await getStaticRenderFunctionsContentAsync(\n projectRoot,\n devServerUrl,\n options\n );\n\n return evalMetroAndWrapFunctions(projectRoot, scriptContents);\n}\n\nexport function evalMetroAndWrapFunctions<T = Record<string, (...args: any[]) => Promise<any>>>(\n projectRoot: string,\n script: string\n): Promise<T> {\n const contents = evalMetro(script);\n\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\nfunction evalMetro(src: string) {\n return profile(requireString, 'eval-metro-bundle')(src);\n}\n"],"names":["getStaticRenderFunctionsContentAsync","createMetroEndpointAsync","requireFileContentsWithMetro","requireWithMetro","getStaticRenderFunctions","evalMetroAndWrapFunctions","debug","require","wrapBundle","str","replace","getRenderModuleId","projectRoot","moduleId","resolveFrom","silent","Error","moveStaticRenderFunction","memoize","requiredModuleId","tempDir","path","join","fs","promises","mkdir","recursive","writeFile","readFile","delayAsync","devServerUrl","dev","minify","environment","root","getMetroServerRoot","relative","startsWith","ensureFileInRootDirectory","otherFile","basename","absoluteFilePath","platform","safeOtherFile","serverPath","url","MetroNodeError","constructor","message","rawObject","props","res","fetch","status","text","errorObject","JSON","parse","stripAnsi","statusText","ok","content","options","scriptContents","script","contents","evalMetro","Object","keys","reduce","acc","key","fn","apply","error","logMetroError","SilentError","src","profile","requireString"],"mappings":"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"}
|
|
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 } from './metro/metroErrorInterface';\nimport { getMetroServerRoot } from './middleware/ManifestMiddleware';\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\nconst debug = require('debug')('expo:start:server:node-renderer') as typeof console.log;\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 = (projectRoot: string): string => {\n const moduleId = resolveFrom.silent(projectRoot, 'expo-router/node/render.js');\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\ntype StaticRenderOptions = {\n // Ensure the style format is `css-xxxx` (prod) instead of `css-view-xxxx` (dev)\n dev?: boolean;\n minify?: boolean;\n platform?: string;\n environment?: 'node';\n engine?: 'hermes';\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. */\nexport async function getStaticRenderFunctionsContentAsync(\n projectRoot: string,\n devServerUrl: string,\n { dev = false, minify = false, environment }: StaticRenderOptions = {}\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const requiredModuleId = getRenderModuleId(root);\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, { dev, minify, environment });\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('../')) {\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 {\n dev = false,\n platform = 'web',\n minify = false,\n environment,\n engine = 'hermes',\n }: StaticRenderOptions = {}\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?$/, '.bundle');\n debug('fetching from Metro:', root, serverPath);\n\n let url = `${devServerUrl}/${serverPath}?platform=${platform}&dev=${dev}&minify=${minify}`;\n\n if (environment) {\n url += `&resolver.environment=${environment}&transform.environment=${environment}`;\n }\n if (engine) {\n url += `&transform.engine=${engine}`;\n }\n return url;\n}\n\nexport class MetroNodeError extends Error {\n constructor(\n message: string,\n public rawObject: any\n ) {\n super(message);\n }\n}\n\nexport async function requireFileContentsWithMetro(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: StaticRenderOptions = {}\n): Promise<string> {\n const url = await createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, props);\n\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 return wrapBundle(content);\n}\n\nexport async function requireWithMetro<T extends Record<string, (...args: any[]) => Promise<any>>>(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n options: StaticRenderOptions = {}\n): Promise<T> {\n const content = await requireFileContentsWithMetro(\n projectRoot,\n devServerUrl,\n absoluteFilePath,\n options\n );\n return evalMetroAndWrapFunctions<T>(projectRoot, content);\n}\n\nexport async function getStaticRenderFunctions(\n projectRoot: string,\n devServerUrl: string,\n options: StaticRenderOptions = {}\n): Promise<Record<string, (...args: any[]) => Promise<any>>> {\n const scriptContents = await getStaticRenderFunctionsContentAsync(\n projectRoot,\n devServerUrl,\n options\n );\n\n return evalMetroAndWrapFunctions(projectRoot, scriptContents);\n}\n\nexport function evalMetroAndWrapFunctions<T = Record<string, (...args: any[]) => Promise<any>>>(\n projectRoot: string,\n script: string\n): Promise<T> {\n const contents = evalMetro(script);\n\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\nfunction evalMetro(src: string) {\n return profile(requireString, 'eval-metro-bundle')(src);\n}\n"],"names":["getStaticRenderFunctionsContentAsync","createMetroEndpointAsync","requireFileContentsWithMetro","requireWithMetro","getStaticRenderFunctions","evalMetroAndWrapFunctions","debug","require","wrapBundle","str","replace","getRenderModuleId","projectRoot","moduleId","resolveFrom","silent","Error","moveStaticRenderFunction","memoize","requiredModuleId","tempDir","path","join","fs","promises","mkdir","recursive","writeFile","readFile","delayAsync","devServerUrl","dev","minify","environment","root","getMetroServerRoot","relative","startsWith","ensureFileInRootDirectory","otherFile","basename","absoluteFilePath","platform","engine","safeOtherFile","serverPath","url","MetroNodeError","constructor","message","rawObject","props","res","fetch","status","text","errorObject","JSON","parse","stripAnsi","statusText","ok","content","options","scriptContents","script","contents","evalMetro","Object","keys","reduce","acc","key","fn","apply","error","logMetroError","SilentError","src","profile","requireString"],"mappings":"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"}
|
|
@@ -92,14 +92,29 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
92
92
|
}
|
|
93
93
|
return manifest;
|
|
94
94
|
}
|
|
95
|
-
async exportExpoRouterApiRoutesAsync({ mode , appDir }) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
mode,
|
|
99
|
-
appDir,
|
|
100
|
-
port: (ref = this.getInstance()) == null ? void 0 : ref.location.port,
|
|
101
|
-
shouldThrow: true
|
|
95
|
+
async exportExpoRouterApiRoutesAsync({ mode , appDir , outputDir }) {
|
|
96
|
+
const manifest = await this.getExpoRouterRoutesManifestAsync({
|
|
97
|
+
appDir
|
|
102
98
|
});
|
|
99
|
+
const files = new Map();
|
|
100
|
+
for (const route of manifest.apiRoutes){
|
|
101
|
+
var ref;
|
|
102
|
+
const filepath = _path.default.join(appDir, route.file);
|
|
103
|
+
const contents = await (0, _bundleApiRoutes).bundleApiRoute(this.projectRoot, filepath, {
|
|
104
|
+
mode,
|
|
105
|
+
appDir,
|
|
106
|
+
port: (ref = this.getInstance()) == null ? void 0 : ref.location.port,
|
|
107
|
+
shouldThrow: true
|
|
108
|
+
});
|
|
109
|
+
const artifactFilename = _path.default.join(outputDir, _path.default.relative(appDir, filepath.replace(/\.[tj]sx?$/, ".js")));
|
|
110
|
+
files.set(artifactFilename, contents);
|
|
111
|
+
// Remap the manifest files to represent the output files.
|
|
112
|
+
route.file = artifactFilename;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
manifest,
|
|
116
|
+
files
|
|
117
|
+
};
|
|
103
118
|
}
|
|
104
119
|
async composeResourcesWithHtml({ mode , resources , template , devBundleUrl , basePath }) {
|
|
105
120
|
if (!resources) {
|
|
@@ -142,7 +157,9 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
142
157
|
environment: "client",
|
|
143
158
|
serializerOutput: "static",
|
|
144
159
|
serializerIncludeMaps: includeMaps,
|
|
145
|
-
mainModuleName: (0, _manifestMiddleware).resolveMainModuleName(this.projectRoot,
|
|
160
|
+
mainModuleName: (0, _manifestMiddleware).resolveMainModuleName(this.projectRoot, {
|
|
161
|
+
platform: "web"
|
|
162
|
+
}),
|
|
146
163
|
lazy: (0, _manifestMiddleware).shouldEnableAsyncImports(this.projectRoot)
|
|
147
164
|
});
|
|
148
165
|
const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl());
|
|
@@ -193,7 +210,9 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
193
210
|
platform: "web",
|
|
194
211
|
mode,
|
|
195
212
|
environment: "client",
|
|
196
|
-
mainModuleName: (0, _manifestMiddleware).resolveMainModuleName(this.projectRoot,
|
|
213
|
+
mainModuleName: (0, _manifestMiddleware).resolveMainModuleName(this.projectRoot, {
|
|
214
|
+
platform: "web"
|
|
215
|
+
}),
|
|
197
216
|
lazy: (0, _manifestMiddleware).shouldEnableAsyncImports(this.projectRoot)
|
|
198
217
|
});
|
|
199
218
|
const bundleStaticHtml = async ()=>{
|
|
@@ -405,7 +424,7 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
405
424
|
// Run once, this prevents the TypeScript project prerequisite from running on every file change.
|
|
406
425
|
off();
|
|
407
426
|
const { TypeScriptProjectPrerequisite } = await Promise.resolve().then(function() {
|
|
408
|
-
return _interopRequireWildcard(require("../../doctor/typescript/TypeScriptProjectPrerequisite"));
|
|
427
|
+
return _interopRequireWildcard(require("../../doctor/typescript/TypeScriptProjectPrerequisite.js"));
|
|
409
428
|
});
|
|
410
429
|
try {
|
|
411
430
|
const req = new TypeScriptProjectPrerequisite(this.projectRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.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 { getConfig } from '@expo/config';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport chalk from 'chalk';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { exportAllApiRoutesAsync, rebundleApiRoute } from './bundleApiRoutes';\nimport { createRouteHandlerMiddleware } from './createServerRouteMiddleware';\nimport { fetchManifest } from './fetchRouterManifest';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { getRouterDirectoryWithManifest, isApiRouteConvention } from './router';\nimport { observeApiRouteChanges, observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { CommandError } from '../../../utils/errors';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { ContextModuleSourceMapsMiddleware } from '../middleware/ContextModuleSourceMapsMiddleware';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport {\n createBundleUrlPath,\n resolveMainModuleName,\n shouldEnableAsyncImports,\n} from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\n\nexport class ForwardHtmlError extends CommandError {\n constructor(\n message: string,\n public html: string,\n public statusCode: number\n ) {\n super(message);\n }\n}\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 8081;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 8081 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n async getExpoRouterRoutesManifestAsync({ appDir }: { appDir: string }) {\n const manifest = await fetchManifest(this.projectRoot, {\n asJson: true,\n appDir,\n });\n\n if (!manifest) {\n throw new CommandError(\n 'EXPO_ROUTER_SERVER_MANIFEST',\n 'Unexpected error: server manifest could not be fetched.'\n );\n }\n\n return manifest;\n }\n\n async exportExpoRouterApiRoutesAsync({\n mode,\n appDir,\n }: {\n mode: 'development' | 'production';\n appDir: string;\n }) {\n return exportAllApiRoutesAsync(this.projectRoot, {\n mode,\n appDir,\n port: this.getInstance()?.location.port,\n shouldThrow: true,\n });\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n basePath,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n /** asset prefix used for deploying to non-standard origins like GitHub pages. */\n basePath: string;\n devBundleUrl?: string;\n }): Promise<string> {\n if (!resources) {\n return '';\n }\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n basePath,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent, getManifest } = await getStaticRenderFunctions(\n this.projectRoot,\n url,\n {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n return {\n // Get routes from Expo Router.\n manifest: await getManifest({ fetchData: true, preserveApiRoutes: false }),\n // Get route generating function\n async renderAsync(path: string) {\n return await getStaticContent(new URL(path, url));\n },\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n includeMaps,\n }: {\n mode: string;\n minify?: boolean;\n includeMaps?: boolean;\n }): Promise<SerialAsset[]> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n serializerIncludeMaps: includeMaps,\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n // console.log('STAT:', results.status, results.statusText);\n let data: any;\n try {\n data = JSON.parse(txt);\n } catch (error: any) {\n debug(txt);\n\n // Metro can throw this error when the initial module id cannot be resolved.\n if (!results.ok && txt.startsWith('<!DOCTYPE html>')) {\n throw new ForwardHtmlError(\n `Metro failed to bundle the project. Check the console for more information.`,\n txt,\n results.status\n );\n }\n\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n throw error;\n }\n\n // NOTE: This could potentially need more validation in the future.\n if (Array.isArray(data)) {\n return data;\n }\n\n if (data != null && (data.errors || data.type?.match(/.*Error$/))) {\n // {\n // type: 'InternalError',\n // errors: [],\n // message: 'Metro has encountered an error: While trying to resolve module `stylis` from file `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js`, the package `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs`. Indeed, none of these files exist:\\n' +\n // '\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css)\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs/index(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css): /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/metro/src/node-haste/DependencyGraph.js (289:17)\\n' +\n // '\\n' +\n // '\\x1B[0m \\x1B[90m 287 |\\x1B[39m }\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 288 |\\x1B[39m \\x1B[36mif\\x1B[39m (error \\x1B[36minstanceof\\x1B[39m \\x1B[33mInvalidPackageError\\x1B[39m) {\\x1B[0m\\n' +\n // '\\x1B[0m\\x1B[31m\\x1B[1m>\\x1B[22m\\x1B[39m\\x1B[90m 289 |\\x1B[39m \\x1B[36mthrow\\x1B[39m \\x1B[36mnew\\x1B[39m \\x1B[33mPackageResolutionError\\x1B[39m({\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m |\\x1B[39m \\x1B[31m\\x1B[1m^\\x1B[22m\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 290 |\\x1B[39m packageError\\x1B[33m:\\x1B[39m error\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 291 |\\x1B[39m originModulePath\\x1B[33m:\\x1B[39m \\x1B[36mfrom\\x1B[39m\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 292 |\\x1B[39m targetModuleName\\x1B[33m:\\x1B[39m to\\x1B[33m,\\x1B[39m\\x1B[0m'\n // }\n // The Metro logger already showed this error.\n throw new Error(data.message);\n }\n\n throw new Error(\n 'Invalid resources returned from the Metro serializer. Expected array, found: ' + data\n );\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n basePath,\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n basePath: string;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n });\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: false,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ mode, minify }),\n bundleStaticHtml(),\n ]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n basePath,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions,\n {\n isExporting: !!options.isExporting,\n }\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // Important that we noop source maps for context modules as soon as possible.\n prependMiddleware(middleware, new ContextModuleSourceMapsMiddleware().getHandler());\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.\n middleware.use(new FaviconMiddleware(this.projectRoot).getHandler());\n\n if (useServerRendering) {\n const appDir = getRouterDirectoryWithManifest(this.projectRoot, exp);\n middleware.use(\n createRouteHandlerMiddleware(this.projectRoot, {\n ...options,\n appDir,\n getWebBundleUrl: manifestMiddleware.getWebBundleUrl.bind(manifestMiddleware),\n getStaticPageAsync: (pathname) => {\n return this.getStaticPageAsync(pathname, {\n mode: options.mode ?? 'development',\n minify: options.minify,\n // No base path in development\n basePath: '',\n });\n },\n })\n );\n\n // @ts-expect-error: TODO\n if (exp.web?.output === 'server') {\n // Cache observation for API Routes...\n observeApiRouteChanges(\n this.projectRoot,\n {\n metro,\n server,\n },\n async (filepath, op) => {\n if (isApiRouteConvention(filepath)) {\n debug(`[expo-cli] ${op} ${filepath}`);\n if (op === 'change' || op === 'add') {\n rebundleApiRoute(this.projectRoot, filepath, {\n ...options,\n appDir,\n });\n }\n\n if (op === 'delete') {\n // TODO: Cancel the bundling of the deleted route.\n }\n }\n }\n );\n }\n } else {\n // This MUST run last since it's the fallback.\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n return startTypescriptTypeGenerationAsync({\n server: this.instance?.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n {\n dev,\n template,\n basePath,\n bundleUrl,\n }: {\n dev: boolean;\n template: string;\n basePath: string;\n /** This is dev-only. */\n bundleUrl?: string;\n }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"${basePath}/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"${basePath}/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"${basePath}/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","ForwardHtmlError","CommandError","constructor","message","html","statusCode","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getExpoRouterRoutesManifestAsync","appDir","manifest","fetchManifest","projectRoot","asJson","exportExpoRouterApiRoutesAsync","mode","exportAllApiRoutesAsync","getInstance","location","shouldThrow","composeResourcesWithHtml","resources","template","devBundleUrl","basePath","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","minify","url","getDevServerUrl","getStaticContent","getManifest","getStaticRenderFunctions","environment","fetchData","preserveApiRoutes","renderAsync","path","URL","getStaticResourcesAsync","includeMaps","data","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","serializerIncludeMaps","mainModuleName","resolveMainModuleName","getConfig","lazy","shouldEnableAsyncImports","results","fetch","toString","txt","text","JSON","parse","error","ok","startsWith","status","Log","Array","isArray","errors","type","match","Error","getStaticPageAsync","pathname","bundleStaticHtml","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","envFiles","getFiles","NODE_ENV","map","fileName","join","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","isExporting","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","ContextModuleSourceMapsMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","skipSDKVersionRequirement","useServerRendering","includes","web","output","ServeStaticMiddleware","FaviconMiddleware","getRouterDirectoryWithManifest","createRouteHandlerMiddleware","getWebBundleUrl","bind","observeApiRouteChanges","filepath","op","isApiRouteConvention","rebundleApiRoute","HistoryFallbackMiddleware","internal","originalClose","close","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","req","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","getDevClientProperties","assets","styleString","filter","asset","metadata","filename","source","hmrId","jsAssets","scripts","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.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 { getConfig } from '@expo/config';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport chalk from 'chalk';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { bundleApiRoute, rebundleApiRoute } from './bundleApiRoutes';\nimport { createRouteHandlerMiddleware } from './createServerRouteMiddleware';\nimport { fetchManifest } from './fetchRouterManifest';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { getRouterDirectoryWithManifest, isApiRouteConvention } from './router';\nimport { observeApiRouteChanges, observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { CommandError } from '../../../utils/errors';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { ContextModuleSourceMapsMiddleware } from '../middleware/ContextModuleSourceMapsMiddleware';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport {\n createBundleUrlPath,\n resolveMainModuleName,\n shouldEnableAsyncImports,\n} from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\n\nexport class ForwardHtmlError extends CommandError {\n constructor(\n message: string,\n public html: string,\n public statusCode: number\n ) {\n super(message);\n }\n}\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 8081;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 8081 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n async getExpoRouterRoutesManifestAsync({ appDir }: { appDir: string }) {\n const manifest = await fetchManifest(this.projectRoot, {\n asJson: true,\n appDir,\n });\n\n if (!manifest) {\n throw new CommandError(\n 'EXPO_ROUTER_SERVER_MANIFEST',\n 'Unexpected error: server manifest could not be fetched.'\n );\n }\n\n return manifest;\n }\n\n async exportExpoRouterApiRoutesAsync({\n mode,\n appDir,\n outputDir,\n }: {\n mode: 'development' | 'production';\n appDir: string;\n outputDir: string;\n }) {\n const manifest = await this.getExpoRouterRoutesManifestAsync({\n appDir,\n });\n\n const files: Map<string, string> = new Map();\n\n for (const route of manifest.apiRoutes) {\n const filepath = path.join(appDir, route.file);\n const contents = await bundleApiRoute(this.projectRoot, filepath, {\n mode,\n appDir,\n port: this.getInstance()?.location.port,\n shouldThrow: true,\n });\n const artifactFilename = path.join(\n outputDir,\n path.relative(appDir, filepath.replace(/\\.[tj]sx?$/, '.js'))\n );\n files.set(artifactFilename, contents!);\n // Remap the manifest files to represent the output files.\n route.file = artifactFilename;\n }\n\n return { manifest, files };\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n basePath,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n /** asset prefix used for deploying to non-standard origins like GitHub pages. */\n basePath: string;\n devBundleUrl?: string;\n }): Promise<string> {\n if (!resources) {\n return '';\n }\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n basePath,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent, getManifest } = await getStaticRenderFunctions(\n this.projectRoot,\n url,\n {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n return {\n // Get routes from Expo Router.\n manifest: await getManifest({ fetchData: true, preserveApiRoutes: false }),\n // Get route generating function\n async renderAsync(path: string) {\n return await getStaticContent(new URL(path, url));\n },\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n includeMaps,\n }: {\n mode: string;\n minify?: boolean;\n includeMaps?: boolean;\n }): Promise<SerialAsset[]> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n serializerIncludeMaps: includeMaps,\n mainModuleName: resolveMainModuleName(this.projectRoot, { platform: 'web' }),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n // console.log('STAT:', results.status, results.statusText);\n let data: any;\n try {\n data = JSON.parse(txt);\n } catch (error: any) {\n debug(txt);\n\n // Metro can throw this error when the initial module id cannot be resolved.\n if (!results.ok && txt.startsWith('<!DOCTYPE html>')) {\n throw new ForwardHtmlError(\n `Metro failed to bundle the project. Check the console for more information.`,\n txt,\n results.status\n );\n }\n\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n throw error;\n }\n\n // NOTE: This could potentially need more validation in the future.\n if (Array.isArray(data)) {\n return data;\n }\n\n if (data != null && (data.errors || data.type?.match(/.*Error$/))) {\n // {\n // type: 'InternalError',\n // errors: [],\n // message: 'Metro has encountered an error: While trying to resolve module `stylis` from file `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js`, the package `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs`. Indeed, none of these files exist:\\n' +\n // '\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css)\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs/index(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css): /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/metro/src/node-haste/DependencyGraph.js (289:17)\\n' +\n // '\\n' +\n // '\\x1B[0m \\x1B[90m 287 |\\x1B[39m }\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 288 |\\x1B[39m \\x1B[36mif\\x1B[39m (error \\x1B[36minstanceof\\x1B[39m \\x1B[33mInvalidPackageError\\x1B[39m) {\\x1B[0m\\n' +\n // '\\x1B[0m\\x1B[31m\\x1B[1m>\\x1B[22m\\x1B[39m\\x1B[90m 289 |\\x1B[39m \\x1B[36mthrow\\x1B[39m \\x1B[36mnew\\x1B[39m \\x1B[33mPackageResolutionError\\x1B[39m({\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m |\\x1B[39m \\x1B[31m\\x1B[1m^\\x1B[22m\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 290 |\\x1B[39m packageError\\x1B[33m:\\x1B[39m error\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 291 |\\x1B[39m originModulePath\\x1B[33m:\\x1B[39m \\x1B[36mfrom\\x1B[39m\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 292 |\\x1B[39m targetModuleName\\x1B[33m:\\x1B[39m to\\x1B[33m,\\x1B[39m\\x1B[0m'\n // }\n // The Metro logger already showed this error.\n throw new Error(data.message);\n }\n\n throw new Error(\n 'Invalid resources returned from the Metro serializer. Expected array, found: ' + data\n );\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n basePath,\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n basePath: string;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, { platform: 'web' }),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n });\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: false,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ mode, minify }),\n bundleStaticHtml(),\n ]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n basePath,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions,\n {\n isExporting: !!options.isExporting,\n }\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // Important that we noop source maps for context modules as soon as possible.\n prependMiddleware(middleware, new ContextModuleSourceMapsMiddleware().getHandler());\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.\n middleware.use(new FaviconMiddleware(this.projectRoot).getHandler());\n\n if (useServerRendering) {\n const appDir = getRouterDirectoryWithManifest(this.projectRoot, exp);\n middleware.use(\n createRouteHandlerMiddleware(this.projectRoot, {\n ...options,\n appDir,\n getWebBundleUrl: manifestMiddleware.getWebBundleUrl.bind(manifestMiddleware),\n getStaticPageAsync: (pathname) => {\n return this.getStaticPageAsync(pathname, {\n mode: options.mode ?? 'development',\n minify: options.minify,\n // No base path in development\n basePath: '',\n });\n },\n })\n );\n\n // @ts-expect-error: TODO\n if (exp.web?.output === 'server') {\n // Cache observation for API Routes...\n observeApiRouteChanges(\n this.projectRoot,\n {\n metro,\n server,\n },\n async (filepath, op) => {\n if (isApiRouteConvention(filepath)) {\n debug(`[expo-cli] ${op} ${filepath}`);\n if (op === 'change' || op === 'add') {\n rebundleApiRoute(this.projectRoot, filepath, {\n ...options,\n appDir,\n });\n }\n\n if (op === 'delete') {\n // TODO: Cancel the bundling of the deleted route.\n }\n }\n }\n );\n }\n } else {\n // This MUST run last since it's the fallback.\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite.js'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n return startTypescriptTypeGenerationAsync({\n server: this.instance?.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n {\n dev,\n template,\n basePath,\n bundleUrl,\n }: {\n dev: boolean;\n template: string;\n basePath: string;\n /** This is dev-only. */\n bundleUrl?: string;\n }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"${basePath}/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"${basePath}/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"${basePath}/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","ForwardHtmlError","CommandError","constructor","message","html","statusCode","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getExpoRouterRoutesManifestAsync","appDir","manifest","fetchManifest","projectRoot","asJson","exportExpoRouterApiRoutesAsync","mode","outputDir","files","Map","route","apiRoutes","filepath","path","join","file","contents","bundleApiRoute","getInstance","location","shouldThrow","artifactFilename","relative","replace","set","composeResourcesWithHtml","resources","template","devBundleUrl","basePath","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","minify","url","getDevServerUrl","getStaticContent","getManifest","getStaticRenderFunctions","environment","fetchData","preserveApiRoutes","renderAsync","URL","getStaticResourcesAsync","includeMaps","data","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","serializerIncludeMaps","mainModuleName","resolveMainModuleName","lazy","shouldEnableAsyncImports","results","fetch","toString","txt","text","JSON","parse","error","ok","startsWith","status","Log","Array","isArray","errors","type","match","Error","getStaticPageAsync","pathname","bundleStaticHtml","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","envFiles","getFiles","NODE_ENV","map","fileName","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","isExporting","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","ContextModuleSourceMapsMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","getConfig","skipSDKVersionRequirement","useServerRendering","includes","web","output","ServeStaticMiddleware","FaviconMiddleware","getRouterDirectoryWithManifest","createRouteHandlerMiddleware","getWebBundleUrl","bind","observeApiRouteChanges","op","isApiRouteConvention","rebundleApiRoute","HistoryFallbackMiddleware","internal","originalClose","close","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","req","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","getDevClientProperties","assets","styleString","filter","asset","metadata","filename","source","hmrId","jsAssets","scripts"],"mappings":"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"}
|