@expo/cli 0.16.0 → 0.16.1

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 CHANGED
@@ -137,7 +137,7 @@ const args = (0, _arg).default({
137
137
  });
138
138
  if (args["--version"]) {
139
139
  // Version is added in the build script.
140
- console.log("0.16.0");
140
+ console.log("0.16.1");
141
141
  process.exit(0);
142
142
  }
143
143
  if (args["--non-interactive"]) {
@@ -271,7 +271,7 @@ commands[command]().then((exec)=>{
271
271
  logEventAsync("action", {
272
272
  action: `expo ${command}`,
273
273
  source: "expo/cli",
274
- source_version: "0.16.0"
274
+ source_version: "0.16.1"
275
275
  });
276
276
  }
277
277
  });
@@ -98,8 +98,8 @@ class DevServerManagerActions {
98
98
  } else {
99
99
  var _deviceName;
100
100
  const choices = apps.map((app)=>({
101
- title: app.title,
102
- value: (_deviceName = app.deviceName) != null ? _deviceName : "Unknown device",
101
+ title: (_deviceName = app.deviceName) != null ? _deviceName : "Unknown device",
102
+ value: app.id,
103
103
  app
104
104
  })
105
105
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { BLT, printHelp, printItem, printQRCode, printUsage, StartOptions } from './commandsTable';\nimport * as Log from '../../log';\nimport { delayAsync } from '../../utils/delay';\nimport { learnMore } from '../../utils/link';\nimport { openBrowserAsync } from '../../utils/open';\nimport { ExpoChoice, selectAsync } from '../../utils/prompts';\nimport { DevServerManager } from '../server/DevServerManager';\nimport {\n addReactDevToolsReloadListener,\n startReactDevToolsProxyAsync,\n} from '../server/ReactDevToolsProxy';\nimport {\n MetroInspectorProxyApp,\n openJsInspector,\n queryAllInspectorAppsAsync,\n} from '../server/middleware/inspector/JsInspector';\n\nconst debug = require('debug')('expo:start:interface:interactiveActions') as typeof console.log;\n\ninterface MoreToolMenuItem extends ExpoChoice<string> {\n action?: () => unknown;\n}\n\n/** Wraps the DevServerManager and adds an interface for user actions. */\nexport class DevServerManagerActions {\n constructor(private devServerManager: DevServerManager) {}\n\n printDevServerInfo(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>\n ) {\n // If native dev server is running, print its URL.\n if (this.devServerManager.getNativeDevServerPort()) {\n const devServer = this.devServerManager.getDefaultDevServer();\n try {\n const nativeRuntimeUrl = devServer.getNativeRuntimeUrl()!;\n const interstitialPageUrl = devServer.getRedirectUrl();\n\n printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n\n if (interstitialPageUrl) {\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n Log.log(printItem(chalk`Metro waiting on {underline ${nativeRuntimeUrl}}`));\n if (options.devClient === false) {\n // TODO: if development build, change this message!\n Log.log(\n printItem('Scan the QR code above with Expo Go (Android) or the Camera app (iOS)')\n );\n } else {\n Log.log(\n printItem(\n 'Scan the QR code above to open the project in a development build. ' +\n learnMore('https://expo.fyi/start')\n )\n );\n }\n } catch (error) {\n console.log('err', error);\n // @ts-ignore: If there is no development build scheme, then skip the QR code.\n if (error.code !== 'NO_DEV_CLIENT_SCHEME') {\n throw error;\n } else {\n const serverUrl = devServer.getDevServerUrl();\n Log.log(printItem(chalk`Metro waiting on {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n }\n }\n }\n\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log();\n Log.log(printItem(chalk`Web is waiting on {underline ${webUrl}}`));\n }\n\n printUsage(options, { verbose: false });\n printHelp();\n Log.log();\n }\n\n async openJsInspectorAsync() {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n let app: MetroInspectorProxyApp | null = null;\n\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n if (apps.length === 1) {\n app = apps[0];\n } else {\n const choices = apps.map((app) => ({\n title: app.title,\n value: app.deviceName ?? 'Unknown device',\n app,\n }));\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n const menuItem = choices.find((item) => item.value === value);\n if (!menuItem) {\n return Log.error(chalk`{bold Debug:} No device available for \"${value}\"`);\n }\n\n app = menuItem.app;\n }\n\n if (!app) {\n return Log.error(chalk`{bold Debug:} No device selected`);\n }\n\n try {\n await openJsInspector(metroServerOrigin, app);\n } catch (error: any) {\n Log.error('Failed to open JavaScript inspector. This is often an issue with Google Chrome.');\n Log.exception(error);\n }\n }\n\n reloadApp() {\n Log.log(`${BLT} Reloading apps`);\n // Send reload requests over the dev servers\n this.devServerManager.broadcastMessage('reload');\n }\n\n async openMoreToolsAsync() {\n // Options match: Chrome > View > Developer\n try {\n const defaultMenuItems: MoreToolMenuItem[] = [\n { title: 'Inspect elements', value: 'toggleElementInspector' },\n { title: 'Toggle performance monitor', value: 'togglePerformanceMonitor' },\n { title: 'Toggle developer menu', value: 'toggleDevMenu' },\n { title: 'Reload app', value: 'reload' },\n {\n title: 'Open React devtools',\n value: 'openReactDevTools',\n action: this.openReactDevToolsAsync,\n },\n // TODO: Maybe a \"View Source\" option to open code.\n ];\n const pluginMenuItems = (\n await this.devServerManager.devtoolsPluginManager.queryPluginsAsync()\n ).map((plugin) => ({\n title: chalk`Open devtools plugin - {bold ${plugin.packageName}}`,\n value: `devtoolsPlugin:${plugin.packageName}`,\n action: async () => {\n const url = new URL(\n plugin.webpageEndpoint,\n this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' })\n );\n await openBrowserAsync(url.toString());\n },\n }));\n const menuItems = [...defaultMenuItems, ...pluginMenuItems];\n const value = await selectAsync(chalk`Dev tools {dim (native only)}`, menuItems);\n const menuItem = menuItems.find((item) => item.value === value);\n if (menuItem?.action) {\n menuItem.action();\n } else if (menuItem?.value) {\n this.devServerManager.broadcastMessage('sendDevCommand', { name: menuItem.value });\n }\n } catch (error: any) {\n debug(error);\n // do nothing\n } finally {\n printHelp();\n }\n }\n\n async openReactDevToolsAsync() {\n await startReactDevToolsProxyAsync();\n const url = this.devServerManager.getDefaultDevServer().getReactDevToolsUrl();\n await openBrowserAsync(url);\n addReactDevToolsReloadListener(() => {\n this.reconnectReactDevTools();\n });\n this.reconnectReactDevTools();\n }\n\n async reconnectReactDevTools() {\n // Wait a little time for react-devtools to be initialized in browser\n await delayAsync(3000);\n this.devServerManager.broadcastMessage('sendDevCommand', { name: 'reconnectReactDevTools' });\n }\n\n toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["Log","debug","require","DevServerManagerActions","constructor","devServerManager","printDevServerInfo","options","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","printQRCode","log","printItem","chalk","devClient","learnMore","error","console","code","serverUrl","getDevServerUrl","webDevServer","getWebDevServer","webUrl","hostType","printUsage","verbose","printHelp","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","app","length","warn","choices","map","title","value","deviceName","selectAsync","menuItem","find","item","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","action","openReactDevToolsAsync","pluginMenuItems","devtoolsPluginManager","queryPluginsAsync","plugin","packageName","url","URL","webpageEndpoint","getUrlCreator","constructUrl","scheme","openBrowserAsync","toString","menuItems","name","startReactDevToolsProxyAsync","getReactDevToolsUrl","addReactDevToolsReloadListener","reconnectReactDevTools","delayAsync","toggleDevMenu"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { BLT, printHelp, printItem, printQRCode, printUsage, StartOptions } from './commandsTable';\nimport * as Log from '../../log';\nimport { delayAsync } from '../../utils/delay';\nimport { learnMore } from '../../utils/link';\nimport { openBrowserAsync } from '../../utils/open';\nimport { ExpoChoice, selectAsync } from '../../utils/prompts';\nimport { DevServerManager } from '../server/DevServerManager';\nimport {\n addReactDevToolsReloadListener,\n startReactDevToolsProxyAsync,\n} from '../server/ReactDevToolsProxy';\nimport {\n MetroInspectorProxyApp,\n openJsInspector,\n queryAllInspectorAppsAsync,\n} from '../server/middleware/inspector/JsInspector';\n\nconst debug = require('debug')('expo:start:interface:interactiveActions') as typeof console.log;\n\ninterface MoreToolMenuItem extends ExpoChoice<string> {\n action?: () => unknown;\n}\n\n/** Wraps the DevServerManager and adds an interface for user actions. */\nexport class DevServerManagerActions {\n constructor(private devServerManager: DevServerManager) {}\n\n printDevServerInfo(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>\n ) {\n // If native dev server is running, print its URL.\n if (this.devServerManager.getNativeDevServerPort()) {\n const devServer = this.devServerManager.getDefaultDevServer();\n try {\n const nativeRuntimeUrl = devServer.getNativeRuntimeUrl()!;\n const interstitialPageUrl = devServer.getRedirectUrl();\n\n printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n\n if (interstitialPageUrl) {\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n Log.log(printItem(chalk`Metro waiting on {underline ${nativeRuntimeUrl}}`));\n if (options.devClient === false) {\n // TODO: if development build, change this message!\n Log.log(\n printItem('Scan the QR code above with Expo Go (Android) or the Camera app (iOS)')\n );\n } else {\n Log.log(\n printItem(\n 'Scan the QR code above to open the project in a development build. ' +\n learnMore('https://expo.fyi/start')\n )\n );\n }\n } catch (error) {\n console.log('err', error);\n // @ts-ignore: If there is no development build scheme, then skip the QR code.\n if (error.code !== 'NO_DEV_CLIENT_SCHEME') {\n throw error;\n } else {\n const serverUrl = devServer.getDevServerUrl();\n Log.log(printItem(chalk`Metro waiting on {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n }\n }\n }\n\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log();\n Log.log(printItem(chalk`Web is waiting on {underline ${webUrl}}`));\n }\n\n printUsage(options, { verbose: false });\n printHelp();\n Log.log();\n }\n\n async openJsInspectorAsync() {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n let app: MetroInspectorProxyApp | null = null;\n\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n if (apps.length === 1) {\n app = apps[0];\n } else {\n const choices = apps.map((app) => ({\n title: app.deviceName ?? 'Unknown device',\n value: app.id,\n app,\n }));\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n const menuItem = choices.find((item) => item.value === value);\n if (!menuItem) {\n return Log.error(chalk`{bold Debug:} No device available for \"${value}\"`);\n }\n\n app = menuItem.app;\n }\n\n if (!app) {\n return Log.error(chalk`{bold Debug:} No device selected`);\n }\n\n try {\n await openJsInspector(metroServerOrigin, app);\n } catch (error: any) {\n Log.error('Failed to open JavaScript inspector. This is often an issue with Google Chrome.');\n Log.exception(error);\n }\n }\n\n reloadApp() {\n Log.log(`${BLT} Reloading apps`);\n // Send reload requests over the dev servers\n this.devServerManager.broadcastMessage('reload');\n }\n\n async openMoreToolsAsync() {\n // Options match: Chrome > View > Developer\n try {\n const defaultMenuItems: MoreToolMenuItem[] = [\n { title: 'Inspect elements', value: 'toggleElementInspector' },\n { title: 'Toggle performance monitor', value: 'togglePerformanceMonitor' },\n { title: 'Toggle developer menu', value: 'toggleDevMenu' },\n { title: 'Reload app', value: 'reload' },\n {\n title: 'Open React devtools',\n value: 'openReactDevTools',\n action: this.openReactDevToolsAsync,\n },\n // TODO: Maybe a \"View Source\" option to open code.\n ];\n const pluginMenuItems = (\n await this.devServerManager.devtoolsPluginManager.queryPluginsAsync()\n ).map((plugin) => ({\n title: chalk`Open devtools plugin - {bold ${plugin.packageName}}`,\n value: `devtoolsPlugin:${plugin.packageName}`,\n action: async () => {\n const url = new URL(\n plugin.webpageEndpoint,\n this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' })\n );\n await openBrowserAsync(url.toString());\n },\n }));\n const menuItems = [...defaultMenuItems, ...pluginMenuItems];\n const value = await selectAsync(chalk`Dev tools {dim (native only)}`, menuItems);\n const menuItem = menuItems.find((item) => item.value === value);\n if (menuItem?.action) {\n menuItem.action();\n } else if (menuItem?.value) {\n this.devServerManager.broadcastMessage('sendDevCommand', { name: menuItem.value });\n }\n } catch (error: any) {\n debug(error);\n // do nothing\n } finally {\n printHelp();\n }\n }\n\n async openReactDevToolsAsync() {\n await startReactDevToolsProxyAsync();\n const url = this.devServerManager.getDefaultDevServer().getReactDevToolsUrl();\n await openBrowserAsync(url);\n addReactDevToolsReloadListener(() => {\n this.reconnectReactDevTools();\n });\n this.reconnectReactDevTools();\n }\n\n async reconnectReactDevTools() {\n // Wait a little time for react-devtools to be initialized in browser\n await delayAsync(3000);\n this.devServerManager.broadcastMessage('sendDevCommand', { name: 'reconnectReactDevTools' });\n }\n\n toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["Log","debug","require","DevServerManagerActions","constructor","devServerManager","printDevServerInfo","options","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","printQRCode","log","printItem","chalk","devClient","learnMore","error","console","code","serverUrl","getDevServerUrl","webDevServer","getWebDevServer","webUrl","hostType","printUsage","verbose","printHelp","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","app","length","warn","choices","map","title","deviceName","value","id","selectAsync","menuItem","find","item","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","action","openReactDevToolsAsync","pluginMenuItems","devtoolsPluginManager","queryPluginsAsync","plugin","packageName","url","URL","webpageEndpoint","getUrlCreator","constructUrl","scheme","openBrowserAsync","toString","menuItems","name","startReactDevToolsProxyAsync","getReactDevToolsUrl","addReactDevToolsReloadListener","reconnectReactDevTools","delayAsync","toggleDevMenu"],"mappings":"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"}
@@ -21,6 +21,7 @@ var _metroDebuggerMiddleware = require("../../../utils/analytics/metroDebuggerMi
21
21
  var _rudderstackClient = require("../../../utils/analytics/rudderstackClient");
22
22
  var _env = require("../../../utils/env");
23
23
  var _manifestMiddleware = require("../middleware/ManifestMiddleware");
24
+ var _createJsInspectorMiddleware = require("../middleware/inspector/createJsInspectorMiddleware");
24
25
  var _mutations = require("../middleware/mutations");
25
26
  var _remoteDevtoolsCorsMiddleware = require("../middleware/remoteDevtoolsCorsMiddleware");
26
27
  var _remoteDevtoolsSecurityHeadersMiddleware = require("../middleware/remoteDevtoolsSecurityHeadersMiddleware");
@@ -159,6 +160,7 @@ async function instantiateMetroAsync(metroBundler, options, { isExporting }) {
159
160
  // Initialize all React Native debug features
160
161
  const { debugMiddleware , debugWebsocketEndpoints } = (0, _createDebugMiddleware).createDebugMiddleware(metroBundler);
161
162
  (0, _mutations).prependMiddleware(middleware, debugMiddleware);
163
+ middleware.use("/_expo/debugger", (0, _createJsInspectorMiddleware).createJsInspectorMiddleware());
162
164
  const { server: server1 , metro } = await (0, _runServerFork).runServer(metroBundler, metroConfig, {
163
165
  // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api
164
166
  websocketEndpoints: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport * as ExpoMetroConfig from '@expo/metro-config';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport { Server as ConnectServer } from 'connect';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\nimport semver from 'semver';\nimport { URL } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { MetroDevServerOptions } from '../../../export/fork-bundleAsync';\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { prependMiddleware, replaceMiddlewareWith } from '../middleware/mutations';\nimport { remoteDevtoolsCorsMiddleware } from '../middleware/remoteDevtoolsCorsMiddleware';\nimport { remoteDevtoolsSecurityHeadersMiddleware } from '../middleware/remoteDevtoolsSecurityHeadersMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { suppressRemoteDebuggingErrorMiddleware } from '../middleware/suppressErrorMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nfunction gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n isExporting,\n }: { exp?: ExpoConfig; isExporting: boolean }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n if (\n // Requires SDK 50 for expo-assets hashAssetPlugin change.\n !exp.sdkVersion ||\n gteSdkVersion(exp, '50.0.0')\n ) {\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n } else {\n if (isExporting && exp.experiments?.baseUrl) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = exp.experiments?.baseUrl;\n }\n }\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n webOutput: exp.web?.output ?? 'single',\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n });\n\n if (process.env.NODE_ENV !== 'test') {\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\n }\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<MetroDevServerOptions, 'logger'>,\n { isExporting }: { isExporting: boolean }\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp, isExporting }\n );\n\n const { createDevServerMiddleware, securityHeadersMiddleware } =\n require('@react-native-community/cli-server-api') as typeof import('@react-native-community/cli-server-api');\n\n const { middleware, messageSocketEndpoint, eventsSocketEndpoint, websocketEndpoints } =\n createDevServerMiddleware({\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n // securityHeadersMiddleware does not support cross-origin requests for remote devtools to get the sourcemap.\n // We replace with the enhanced version.\n replaceMiddlewareWith(\n middleware as ConnectServer,\n securityHeadersMiddleware,\n remoteDevtoolsSecurityHeadersMiddleware\n );\n\n middleware.use(remoteDevtoolsCorsMiddleware);\n\n prependMiddleware(middleware, suppressRemoteDebuggingErrorMiddleware);\n\n // TODO: We can probably drop this now.\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n // Initialize all React Native debug features\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware(metroBundler);\n prependMiddleware(middleware, debugMiddleware);\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api\n websocketEndpoints: {\n ...websocketEndpoints,\n ...debugWebsocketEndpoints,\n },\n watch: !isExporting && isWatchEnabled(),\n });\n\n prependMiddleware(middleware, (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n // If the URL is a Metro asset request, then we need to skip all other middleware to prevent\n // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.\n // /assets/?unstable_path=.\n if (req.url) {\n const url = new URL(req.url!, 'http://localhost:8000');\n if (url.pathname.match(/^\\/assets\\/?/) && url.searchParams.get('unstable_path') != null) {\n return metro.processRequest(req, res, next);\n }\n }\n return next();\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","ExpoMetroConfig","gteSdkVersion","exp","sdkVersion","semver","gte","Error","projectRoot","options","getConfig","skipSDKVersionRequirement","isExporting","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","config","loadAsync","transformer","publicPath","experiments","baseUrl","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","webOutput","web","output","isFastResolverEnabled","env","EXPO_USE_FAST_RESOLVER","NODE_ENV","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","createDevServerMiddleware","securityHeadersMiddleware","require","middleware","messageSocketEndpoint","eventsSocketEndpoint","websocketEndpoints","port","server","watchFolders","replaceMiddlewareWith","remoteDevtoolsSecurityHeadersMiddleware","use","remoteDevtoolsCorsMiddleware","prependMiddleware","suppressRemoteDebuggingErrorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","createDebuggerTelemetryMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","metro","runServer","watch","req","res","next","url","URL","pathname","match","searchParams","get","processRequest","messageSocket","CI","Log","log","chalk"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport * as ExpoMetroConfig from '@expo/metro-config';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport { Server as ConnectServer } from 'connect';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\nimport semver from 'semver';\nimport { URL } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { MetroDevServerOptions } from '../../../export/fork-bundleAsync';\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { createJsInspectorMiddleware } from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware, replaceMiddlewareWith } from '../middleware/mutations';\nimport { remoteDevtoolsCorsMiddleware } from '../middleware/remoteDevtoolsCorsMiddleware';\nimport { remoteDevtoolsSecurityHeadersMiddleware } from '../middleware/remoteDevtoolsSecurityHeadersMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { suppressRemoteDebuggingErrorMiddleware } from '../middleware/suppressErrorMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nfunction gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n isExporting,\n }: { exp?: ExpoConfig; isExporting: boolean }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n if (\n // Requires SDK 50 for expo-assets hashAssetPlugin change.\n !exp.sdkVersion ||\n gteSdkVersion(exp, '50.0.0')\n ) {\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n } else {\n if (isExporting && exp.experiments?.baseUrl) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = exp.experiments?.baseUrl;\n }\n }\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n webOutput: exp.web?.output ?? 'single',\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n });\n\n if (process.env.NODE_ENV !== 'test') {\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\n }\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<MetroDevServerOptions, 'logger'>,\n { isExporting }: { isExporting: boolean }\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp, isExporting }\n );\n\n const { createDevServerMiddleware, securityHeadersMiddleware } =\n require('@react-native-community/cli-server-api') as typeof import('@react-native-community/cli-server-api');\n\n const { middleware, messageSocketEndpoint, eventsSocketEndpoint, websocketEndpoints } =\n createDevServerMiddleware({\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n // securityHeadersMiddleware does not support cross-origin requests for remote devtools to get the sourcemap.\n // We replace with the enhanced version.\n replaceMiddlewareWith(\n middleware as ConnectServer,\n securityHeadersMiddleware,\n remoteDevtoolsSecurityHeadersMiddleware\n );\n\n middleware.use(remoteDevtoolsCorsMiddleware);\n\n prependMiddleware(middleware, suppressRemoteDebuggingErrorMiddleware);\n\n // TODO: We can probably drop this now.\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n // Initialize all React Native debug features\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware(metroBundler);\n prependMiddleware(middleware, debugMiddleware);\n middleware.use('/_expo/debugger', createJsInspectorMiddleware());\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api\n websocketEndpoints: {\n ...websocketEndpoints,\n ...debugWebsocketEndpoints,\n },\n watch: !isExporting && isWatchEnabled(),\n });\n\n prependMiddleware(middleware, (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n // If the URL is a Metro asset request, then we need to skip all other middleware to prevent\n // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.\n // /assets/?unstable_path=.\n if (req.url) {\n const url = new URL(req.url!, 'http://localhost:8000');\n if (url.pathname.match(/^\\/assets\\/?/) && url.searchParams.get('unstable_path') != null) {\n return metro.processRequest(req, res, next);\n }\n }\n return next();\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","ExpoMetroConfig","gteSdkVersion","exp","sdkVersion","semver","gte","Error","projectRoot","options","getConfig","skipSDKVersionRequirement","isExporting","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","config","loadAsync","transformer","publicPath","experiments","baseUrl","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","webOutput","web","output","isFastResolverEnabled","env","EXPO_USE_FAST_RESOLVER","NODE_ENV","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","createDevServerMiddleware","securityHeadersMiddleware","require","middleware","messageSocketEndpoint","eventsSocketEndpoint","websocketEndpoints","port","server","watchFolders","replaceMiddlewareWith","remoteDevtoolsSecurityHeadersMiddleware","use","remoteDevtoolsCorsMiddleware","prependMiddleware","suppressRemoteDebuggingErrorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","createDebuggerTelemetryMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","createJsInspectorMiddleware","metro","runServer","watch","req","res","next","url","URL","pathname","match","searchParams","get","processRequest","messageSocket","CI","Log","log","chalk"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.createJsInspectorMiddleware = createJsInspectorMiddleware;
6
+ var _chalk = _interopRequireDefault(require("chalk"));
7
+ var _net = _interopRequireDefault(require("net"));
8
+ var _tls = require("tls");
9
+ var _url = require("url");
10
+ var _jsInspector = require("./JsInspector");
11
+ function _interopRequireDefault(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ function createJsInspectorMiddleware() {
17
+ return async function(req, res, next) {
18
+ var _url1;
19
+ const { origin , searchParams } = new _url.URL((_url1 = req.url) != null ? _url1 : "/", getServerBase(req));
20
+ const appId = searchParams.get("appId") || searchParams.get("applicationId");
21
+ if (!appId) {
22
+ res.writeHead(400).end('Missing application identifier ("?appId=...")');
23
+ return;
24
+ }
25
+ const app = await (0, _jsInspector).queryInspectorAppAsync(origin, appId);
26
+ if (!app) {
27
+ res.writeHead(404).end("Unable to find inspector target from @react-native/dev-middleware");
28
+ console.warn(_chalk.default.yellow("No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine."));
29
+ return;
30
+ }
31
+ if (req.method === "GET") {
32
+ const data = JSON.stringify(app);
33
+ res.writeHead(200, {
34
+ "Content-Type": "application/json; charset=UTF-8",
35
+ "Cache-Control": "no-cache",
36
+ "Content-Length": data.length.toString()
37
+ });
38
+ res.end(data);
39
+ } else if (req.method === "POST" || req.method === "PUT") {
40
+ try {
41
+ await (0, _jsInspector).openJsInspector(origin, app);
42
+ } catch (error) {
43
+ var ref;
44
+ // abort(Error: Command failed: osascript -e POSIX path of (path to application "google chrome")
45
+ // 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)
46
+ console.error(_chalk.default.red("Error launching JS inspector: " + ((ref = error == null ? void 0 : error.message) != null ? ref : "Unknown error occurred")));
47
+ res.writeHead(500);
48
+ res.end();
49
+ return;
50
+ }
51
+ res.end();
52
+ } else {
53
+ res.writeHead(405);
54
+ }
55
+ };
56
+ }
57
+ function getServerBase(req) {
58
+ const scheme = req.socket instanceof _tls.TLSSocket && req.socket.encrypted === true ? "https" : "http";
59
+ const { localAddress , localPort } = req.socket;
60
+ const address = localAddress && _net.default.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;
61
+ return `${scheme}:${address}:${localPort}`;
62
+ }
63
+
64
+ //# sourceMappingURL=createJsInspectorMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/createJsInspectorMiddleware.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { NextHandleFunction } from 'connect';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport net from 'net';\nimport { TLSSocket } from 'tls';\nimport { URL } from 'url';\n\nimport { openJsInspector, queryInspectorAppAsync } from './JsInspector';\n\n/**\n * Create a middleware that handles new requests to open the debugger from the dev menu.\n * @todo(cedric): delete this middleware once we fully swap over to the new React Native JS Inspector.\n */\nexport function createJsInspectorMiddleware(): NextHandleFunction {\n return async function (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => void) {\n const { origin, searchParams } = new URL(req.url ?? '/', getServerBase(req));\n const appId = searchParams.get('appId') || searchParams.get('applicationId');\n if (!appId) {\n res.writeHead(400).end('Missing application identifier (\"?appId=...\")');\n return;\n }\n\n const app = await queryInspectorAppAsync(origin, appId);\n if (!app) {\n res.writeHead(404).end('Unable to find inspector target from @react-native/dev-middleware');\n console.warn(\n chalk.yellow(\n 'No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine.'\n )\n );\n return;\n }\n\n if (req.method === 'GET') {\n const data = JSON.stringify(app);\n res.writeHead(200, {\n 'Content-Type': 'application/json; charset=UTF-8',\n 'Cache-Control': 'no-cache',\n 'Content-Length': data.length.toString(),\n });\n res.end(data);\n } else if (req.method === 'POST' || req.method === 'PUT') {\n try {\n await openJsInspector(origin, app);\n } catch (error: any) {\n // abort(Error: Command failed: osascript -e POSIX path of (path to application \"google chrome\")\n // 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)\n\n console.error(\n chalk.red('Error launching JS inspector: ' + (error?.message ?? 'Unknown error occurred'))\n );\n res.writeHead(500);\n res.end();\n return;\n }\n res.end();\n } else {\n res.writeHead(405);\n }\n };\n}\n\nfunction getServerBase(req: IncomingMessage): string {\n const scheme =\n req.socket instanceof TLSSocket && req.socket.encrypted === true ? 'https' : 'http';\n const { localAddress, localPort } = req.socket;\n const address = localAddress && net.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;\n return `${scheme}:${address}:${localPort}`;\n}\n"],"names":["createJsInspectorMiddleware","req","res","next","origin","searchParams","URL","url","getServerBase","appId","get","writeHead","end","app","queryInspectorAppAsync","console","warn","chalk","yellow","method","data","JSON","stringify","length","toString","openJsInspector","error","red","message","scheme","socket","TLSSocket","encrypted","localAddress","localPort","address","net","isIPv6"],"mappings":"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"}
@@ -94,7 +94,7 @@ async function logEventAsync(event, properties = {}) {
94
94
  }
95
95
  const { userId , deviceId } = identifyData;
96
96
  const commonEventProperties = {
97
- source_version: "0.16.0",
97
+ source_version: "0.16.1",
98
98
  source: "expo"
99
99
  };
100
100
  const identity = {
@@ -135,7 +135,7 @@ function getContext() {
135
135
  },
136
136
  app: {
137
137
  name: "expo",
138
- version: "0.16.0"
138
+ version: "0.16.1"
139
139
  },
140
140
  ci: ciInfo.isCI ? {
141
141
  name: ciInfo.name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.16.0",
3
+ "version": "0.16.1",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -159,5 +159,5 @@
159
159
  "tree-kill": "^1.2.2",
160
160
  "tsd": "^0.28.1"
161
161
  },
162
- "gitHead": "2763e9cc6f2317b40da73382fe2595f8deebff46"
162
+ "gitHead": "298f6e97c5eda609a25e87a7951540480119a403"
163
163
  }