@expo/cli 0.10.9 → 0.10.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/bin/cli CHANGED
@@ -132,7 +132,7 @@ const args = (0, _arg).default({
132
132
  });
133
133
  if (args["--version"]) {
134
134
  // Version is added in the build script.
135
- console.log("0.10.9");
135
+ console.log("0.10.10");
136
136
  process.exit(0);
137
137
  }
138
138
  if (args["--non-interactive"]) {
@@ -262,7 +262,7 @@ commands[command]().then((exec)=>{
262
262
  logEventAsync("action", {
263
263
  action: `expo ${command}`,
264
264
  source: "expo/cli",
265
- source_version: "0.10.9"
265
+ source_version: "0.10.10"
266
266
  });
267
267
  });
268
268
 
@@ -27,27 +27,30 @@ class ExpoInspectorProxy {
27
27
  this.processRequest = this.processRequest.bind(this);
28
28
  }
29
29
  /**
30
- * Initialize the server address from the metro server.
31
- * This is required to properly reference sourcemaps for the debugger.
32
- */ setServerAddress(server) {
33
- const addressInfo = server.address();
30
+ * Normalize the server address for clients to connect to.
31
+ * @param addressInfo the server address returned by `HttpServer.address()` or `HttpsServer.address()`.
32
+ * @returns "address:port"
33
+ */ static normalizeServerAddress(addressInfo) {
34
34
  if (typeof addressInfo === "string") {
35
35
  throw new Error(`Inspector proxy could not resolve the server address, got "${addressInfo}"`);
36
36
  } else if (addressInfo === null) {
37
37
  throw new Error(`Inspector proxy could not resolve the server address, got "null"`);
38
38
  }
39
- const { address , port , family } = addressInfo;
40
- if (family === "IPv6") {
41
- this.metroProxy._serverAddressWithPort = `[${address != null ? address : "::1"}]:${port}`;
39
+ let address = addressInfo.address;
40
+ if (addressInfo.family === "IPv6") {
41
+ address = address === "::" ? `[::1]` : `[${address}]`;
42
42
  } else {
43
- this.metroProxy._serverAddressWithPort = `${address != null ? address : "localhost"}:${port}`;
43
+ address = address === "0.0.0.0" ? "localhost" : address;
44
44
  }
45
+ return `${address}:${addressInfo.port}`;
45
46
  }
46
47
  /** @see https://chromedevtools.github.io/devtools-protocol/#endpoints */ processRequest(req, res, next) {
47
48
  this.metroProxy.processRequest(req, res, next);
48
49
  }
49
50
  createWebSocketListeners(server) {
50
- this.setServerAddress(server);
51
+ // Initialize the server address from the metro server.
52
+ // This is required to properly reference sourcemaps for the debugger.
53
+ this.metroProxy._serverAddressWithPort = ExpoInspectorProxy.normalizeServerAddress(server.address());
51
54
  return {
52
55
  [WS_DEVICE_URL]: this.createDeviceWebSocketServer(),
53
56
  [WS_DEBUGGER_URL]: this.createDebuggerWebSocketServer()
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/start/server/metro/inspector-proxy/proxy.ts"],"sourcesContent":["import type { Server as HttpServer, IncomingMessage, ServerResponse } from 'http';\nimport type { Server as HttpsServer } from 'https';\nimport type { InspectorProxy as MetroProxy, Device as MetroDevice } from 'metro-inspector-proxy';\nimport { parse } from 'url';\nimport WS, { Server as WSServer } from 'ws';\n\nimport { Log } from '../../../../log';\n\nconst WS_DEVICE_URL = '/inspector/device';\nconst WS_DEBUGGER_URL = '/inspector/debug';\nconst WS_GENERIC_ERROR_STATUS = 1011;\n\nconst debug = require('debug')('expo:metro:inspector-proxy:proxy') as typeof console.log;\n\n// This is a workaround for `ConstructorType` not working on dynamically generated classes\ntype Instantiatable<Instance> = new (...args: any) => Instance;\n\nexport class ExpoInspectorProxy<D extends MetroDevice = MetroDevice> {\n constructor(\n public readonly metroProxy: MetroProxy,\n private DeviceClass: Instantiatable<D>,\n public readonly devices: Map<string, D> = new Map()\n ) {\n // monkey-patch the device list to expose it within the metro inspector\n // See https://github.com/facebook/metro/pull/991\n // @ts-expect-error - Device ID is changing from `number` to `string`\n this.metroProxy._devices = this.devices;\n\n // force httpEndpointMiddleware to be bound to this proxy instance\n this.processRequest = this.processRequest.bind(this);\n }\n\n /**\n * Initialize the server address from the metro server.\n * This is required to properly reference sourcemaps for the debugger.\n */\n private setServerAddress(server: HttpServer | HttpsServer) {\n const addressInfo = server.address();\n\n if (typeof addressInfo === 'string') {\n throw new Error(`Inspector proxy could not resolve the server address, got \"${addressInfo}\"`);\n } else if (addressInfo === null) {\n throw new Error(`Inspector proxy could not resolve the server address, got \"null\"`);\n }\n\n const { address, port, family } = addressInfo;\n\n if (family === 'IPv6') {\n this.metroProxy._serverAddressWithPort = `[${address ?? '::1'}]:${port}`;\n } else {\n this.metroProxy._serverAddressWithPort = `${address ?? 'localhost'}:${port}`;\n }\n }\n\n /** @see https://chromedevtools.github.io/devtools-protocol/#endpoints */\n public processRequest(req: IncomingMessage, res: ServerResponse, next: (error?: Error) => any) {\n this.metroProxy.processRequest(req, res, next);\n }\n\n public createWebSocketListeners(server: HttpServer | HttpsServer): Record<string, WSServer> {\n this.setServerAddress(server);\n\n return {\n [WS_DEVICE_URL]: this.createDeviceWebSocketServer(),\n [WS_DEBUGGER_URL]: this.createDebuggerWebSocketServer(),\n };\n }\n\n private createDeviceWebSocketServer() {\n const wss = new WS.Server({\n noServer: true,\n perMessageDeflate: false,\n });\n\n // See: https://github.com/facebook/metro/blob/eeb211fdcfdcb9e7f8a51721bd0f48bc7d0d211f/packages/metro-inspector-proxy/src/InspectorProxy.js#L157\n wss.on('connection', (socket, request) => {\n try {\n const fallbackDeviceId = String(this.metroProxy._deviceCounter++);\n const { deviceId: newDeviceId, deviceName, appName } = getDeviceInfo(request.url);\n\n const deviceId = newDeviceId ?? fallbackDeviceId;\n\n const oldDevice = this.devices.get(deviceId);\n const newDevice = new this.DeviceClass(\n deviceId,\n deviceName,\n appName,\n socket,\n this.metroProxy._projectRoot\n );\n\n if (oldDevice) {\n debug('Device reconnected: device=%s, app=%s, id=%s', deviceName, appName, deviceId);\n // See: https://github.com/facebook/metro/pull/991\n // @ts-expect-error - Newly introduced method coming to metro-inspector-proxy soon\n oldDevice.handleDuplicateDeviceConnection(newDevice);\n } else {\n debug('New device connected: device=%s, app=%s, id=%s', deviceName, appName, deviceId);\n }\n\n this.devices.set(deviceId, newDevice);\n\n socket.on('close', () => {\n if (this.devices.get(deviceId) === newDevice) {\n this.devices.delete(deviceId);\n debug('Device disconnected: device=%s, app=%s, id=%s', deviceName, appName, deviceId);\n }\n });\n } catch (error: unknown) {\n let message = '';\n\n debug('Could not establish a connection to on-device debugger:', error);\n\n if (error instanceof Error) {\n message = error.toString();\n Log.error('Failed to create a socket connection to on-device debugger (Hermes engine).');\n Log.exception(error);\n } else {\n Log.error(\n 'Failed to create a socket connection to on-device debugger (Hermes engine), unknown error.'\n );\n }\n\n socket.close(WS_GENERIC_ERROR_STATUS, message || 'Unknown error');\n }\n });\n\n return wss;\n }\n\n private createDebuggerWebSocketServer() {\n const wss = new WS.Server({\n noServer: true,\n perMessageDeflate: false,\n });\n\n // See: https://github.com/facebook/metro/blob/eeb211fdcfdcb9e7f8a51721bd0f48bc7d0d211f/packages/metro-inspector-proxy/src/InspectorProxy.js#L193\n wss.on('connection', (socket, request) => {\n try {\n const { deviceId, pageId, debuggerType } = getDebuggerInfo(request.url);\n if (!deviceId || !pageId) {\n // TODO(cedric): change these errors to proper error types\n throw new Error(`Missing \"device\" and/or \"page\" IDs in query parameters`);\n }\n\n const device = this.devices.get(deviceId);\n if (!device) {\n // TODO(cedric): change these errors to proper error types\n throw new Error(`Device with ID \"${deviceId}\" not found.`);\n }\n\n debug('New debugger connected: device=%s, app=%s', device._name, device._app);\n\n // @ts-expect-error The `handleDebuggerConnectionWithType` is part of our device implementation, not Metro's device\n if (debuggerType && typeof device.handleDebuggerConnectionWithType === 'function') {\n // @ts-expect-error The `handleDebuggerConnectionWithType` is part of our device implementation, not Metro's device\n device.handleDebuggerConnectionWithType(socket, pageId, debuggerType);\n } else {\n device.handleDebuggerConnection(socket, pageId);\n }\n\n socket.on('close', () => {\n debug('Debugger disconnected: device=%s, app=%s', device._name, device._app);\n });\n } catch (error: unknown) {\n let message = '';\n\n debug('Could not establish a connection to debugger:', error);\n\n if (error instanceof Error) {\n message = error.toString();\n Log.error('Failed to create a socket connection to the debugger.');\n Log.exception(error);\n } else {\n Log.error('Failed to create a socket connection to the debugger, unkown error.');\n }\n\n socket.close(WS_GENERIC_ERROR_STATUS, message || 'Unknown error');\n }\n });\n\n return wss;\n }\n}\n\nfunction asString(value: string | string[] = ''): string {\n return Array.isArray(value) ? value.join() : value;\n}\n\nfunction getDeviceInfo(url: IncomingMessage['url']) {\n const { query } = parse(url ?? '', true);\n return {\n deviceId: asString(query.device) || undefined,\n deviceName: asString(query.name) || 'Unknown device name',\n appName: asString(query.app) || 'Unknown app name',\n };\n}\n\nfunction getDebuggerInfo(url: IncomingMessage['url']) {\n const { query } = parse(url ?? '', true);\n return {\n deviceId: asString(query.device),\n pageId: asString(query.page),\n debuggerType: asString(query.type) ?? undefined,\n };\n}\n"],"names":["WS_DEVICE_URL","WS_DEBUGGER_URL","WS_GENERIC_ERROR_STATUS","debug","require","ExpoInspectorProxy","constructor","metroProxy","DeviceClass","devices","Map","_devices","processRequest","bind","setServerAddress","server","addressInfo","address","Error","port","family","_serverAddressWithPort","req","res","next","createWebSocketListeners","createDeviceWebSocketServer","createDebuggerWebSocketServer","wss","WS","Server","noServer","perMessageDeflate","on","socket","request","fallbackDeviceId","String","_deviceCounter","deviceId","newDeviceId","deviceName","appName","getDeviceInfo","url","oldDevice","get","newDevice","_projectRoot","handleDuplicateDeviceConnection","set","delete","error","message","toString","Log","exception","close","pageId","debuggerType","getDebuggerInfo","device","_name","_app","handleDebuggerConnectionWithType","handleDebuggerConnection","asString","value","Array","isArray","join","query","parse","undefined","name","app","page","type"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/start/server/metro/inspector-proxy/proxy.ts"],"sourcesContent":["import type { Server as HttpServer, IncomingMessage, ServerResponse } from 'http';\nimport type { Server as HttpsServer } from 'https';\nimport type { InspectorProxy as MetroProxy, Device as MetroDevice } from 'metro-inspector-proxy';\nimport { parse } from 'url';\nimport WS, { Server as WSServer } from 'ws';\n\nimport { Log } from '../../../../log';\n\nconst WS_DEVICE_URL = '/inspector/device';\nconst WS_DEBUGGER_URL = '/inspector/debug';\nconst WS_GENERIC_ERROR_STATUS = 1011;\n\nconst debug = require('debug')('expo:metro:inspector-proxy:proxy') as typeof console.log;\n\n// This is a workaround for `ConstructorType` not working on dynamically generated classes\ntype Instantiatable<Instance> = new (...args: any) => Instance;\n\nexport class ExpoInspectorProxy<D extends MetroDevice = MetroDevice> {\n constructor(\n public readonly metroProxy: MetroProxy,\n private DeviceClass: Instantiatable<D>,\n public readonly devices: Map<string, D> = new Map()\n ) {\n // monkey-patch the device list to expose it within the metro inspector\n // See https://github.com/facebook/metro/pull/991\n // @ts-expect-error - Device ID is changing from `number` to `string`\n this.metroProxy._devices = this.devices;\n\n // force httpEndpointMiddleware to be bound to this proxy instance\n this.processRequest = this.processRequest.bind(this);\n }\n\n /**\n * Normalize the server address for clients to connect to.\n * @param addressInfo the server address returned by `HttpServer.address()` or `HttpsServer.address()`.\n * @returns \"address:port\"\n */\n public static normalizeServerAddress(addressInfo: ReturnType<HttpServer['address']>): string {\n if (typeof addressInfo === 'string') {\n throw new Error(`Inspector proxy could not resolve the server address, got \"${addressInfo}\"`);\n } else if (addressInfo === null) {\n throw new Error(`Inspector proxy could not resolve the server address, got \"null\"`);\n }\n\n let address = addressInfo.address;\n if (addressInfo.family === 'IPv6') {\n address = address === '::' ? `[::1]` : `[${address}]`;\n } else {\n address = address === '0.0.0.0' ? 'localhost' : address;\n }\n return `${address}:${addressInfo.port}`;\n }\n\n /** @see https://chromedevtools.github.io/devtools-protocol/#endpoints */\n public processRequest(req: IncomingMessage, res: ServerResponse, next: (error?: Error) => any) {\n this.metroProxy.processRequest(req, res, next);\n }\n\n public createWebSocketListeners(server: HttpServer | HttpsServer): Record<string, WSServer> {\n // Initialize the server address from the metro server.\n // This is required to properly reference sourcemaps for the debugger.\n this.metroProxy._serverAddressWithPort = ExpoInspectorProxy.normalizeServerAddress(\n server.address()\n );\n\n return {\n [WS_DEVICE_URL]: this.createDeviceWebSocketServer(),\n [WS_DEBUGGER_URL]: this.createDebuggerWebSocketServer(),\n };\n }\n\n private createDeviceWebSocketServer() {\n const wss = new WS.Server({\n noServer: true,\n perMessageDeflate: false,\n });\n\n // See: https://github.com/facebook/metro/blob/eeb211fdcfdcb9e7f8a51721bd0f48bc7d0d211f/packages/metro-inspector-proxy/src/InspectorProxy.js#L157\n wss.on('connection', (socket, request) => {\n try {\n const fallbackDeviceId = String(this.metroProxy._deviceCounter++);\n const { deviceId: newDeviceId, deviceName, appName } = getDeviceInfo(request.url);\n\n const deviceId = newDeviceId ?? fallbackDeviceId;\n\n const oldDevice = this.devices.get(deviceId);\n const newDevice = new this.DeviceClass(\n deviceId,\n deviceName,\n appName,\n socket,\n this.metroProxy._projectRoot\n );\n\n if (oldDevice) {\n debug('Device reconnected: device=%s, app=%s, id=%s', deviceName, appName, deviceId);\n // See: https://github.com/facebook/metro/pull/991\n // @ts-expect-error - Newly introduced method coming to metro-inspector-proxy soon\n oldDevice.handleDuplicateDeviceConnection(newDevice);\n } else {\n debug('New device connected: device=%s, app=%s, id=%s', deviceName, appName, deviceId);\n }\n\n this.devices.set(deviceId, newDevice);\n\n socket.on('close', () => {\n if (this.devices.get(deviceId) === newDevice) {\n this.devices.delete(deviceId);\n debug('Device disconnected: device=%s, app=%s, id=%s', deviceName, appName, deviceId);\n }\n });\n } catch (error: unknown) {\n let message = '';\n\n debug('Could not establish a connection to on-device debugger:', error);\n\n if (error instanceof Error) {\n message = error.toString();\n Log.error('Failed to create a socket connection to on-device debugger (Hermes engine).');\n Log.exception(error);\n } else {\n Log.error(\n 'Failed to create a socket connection to on-device debugger (Hermes engine), unknown error.'\n );\n }\n\n socket.close(WS_GENERIC_ERROR_STATUS, message || 'Unknown error');\n }\n });\n\n return wss;\n }\n\n private createDebuggerWebSocketServer() {\n const wss = new WS.Server({\n noServer: true,\n perMessageDeflate: false,\n });\n\n // See: https://github.com/facebook/metro/blob/eeb211fdcfdcb9e7f8a51721bd0f48bc7d0d211f/packages/metro-inspector-proxy/src/InspectorProxy.js#L193\n wss.on('connection', (socket, request) => {\n try {\n const { deviceId, pageId, debuggerType } = getDebuggerInfo(request.url);\n if (!deviceId || !pageId) {\n // TODO(cedric): change these errors to proper error types\n throw new Error(`Missing \"device\" and/or \"page\" IDs in query parameters`);\n }\n\n const device = this.devices.get(deviceId);\n if (!device) {\n // TODO(cedric): change these errors to proper error types\n throw new Error(`Device with ID \"${deviceId}\" not found.`);\n }\n\n debug('New debugger connected: device=%s, app=%s', device._name, device._app);\n\n // @ts-expect-error The `handleDebuggerConnectionWithType` is part of our device implementation, not Metro's device\n if (debuggerType && typeof device.handleDebuggerConnectionWithType === 'function') {\n // @ts-expect-error The `handleDebuggerConnectionWithType` is part of our device implementation, not Metro's device\n device.handleDebuggerConnectionWithType(socket, pageId, debuggerType);\n } else {\n device.handleDebuggerConnection(socket, pageId);\n }\n\n socket.on('close', () => {\n debug('Debugger disconnected: device=%s, app=%s', device._name, device._app);\n });\n } catch (error: unknown) {\n let message = '';\n\n debug('Could not establish a connection to debugger:', error);\n\n if (error instanceof Error) {\n message = error.toString();\n Log.error('Failed to create a socket connection to the debugger.');\n Log.exception(error);\n } else {\n Log.error('Failed to create a socket connection to the debugger, unkown error.');\n }\n\n socket.close(WS_GENERIC_ERROR_STATUS, message || 'Unknown error');\n }\n });\n\n return wss;\n }\n}\n\nfunction asString(value: string | string[] = ''): string {\n return Array.isArray(value) ? value.join() : value;\n}\n\nfunction getDeviceInfo(url: IncomingMessage['url']) {\n const { query } = parse(url ?? '', true);\n return {\n deviceId: asString(query.device) || undefined,\n deviceName: asString(query.name) || 'Unknown device name',\n appName: asString(query.app) || 'Unknown app name',\n };\n}\n\nfunction getDebuggerInfo(url: IncomingMessage['url']) {\n const { query } = parse(url ?? '', true);\n return {\n deviceId: asString(query.device),\n pageId: asString(query.page),\n debuggerType: asString(query.type) ?? undefined,\n };\n}\n"],"names":["WS_DEVICE_URL","WS_DEBUGGER_URL","WS_GENERIC_ERROR_STATUS","debug","require","ExpoInspectorProxy","constructor","metroProxy","DeviceClass","devices","Map","_devices","processRequest","bind","normalizeServerAddress","addressInfo","Error","address","family","port","req","res","next","createWebSocketListeners","server","_serverAddressWithPort","createDeviceWebSocketServer","createDebuggerWebSocketServer","wss","WS","Server","noServer","perMessageDeflate","on","socket","request","fallbackDeviceId","String","_deviceCounter","deviceId","newDeviceId","deviceName","appName","getDeviceInfo","url","oldDevice","get","newDevice","_projectRoot","handleDuplicateDeviceConnection","set","delete","error","message","toString","Log","exception","close","pageId","debuggerType","getDebuggerInfo","device","_name","_app","handleDebuggerConnectionWithType","handleDebuggerConnection","asString","value","Array","isArray","join","query","parse","undefined","name","app","page","type"],"mappings":"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"}
@@ -138,7 +138,7 @@ async function createHostInfoAsync() {
138
138
  host: await _userSettings.default.getAnonymousIdentifierAsync(),
139
139
  server: "expo",
140
140
  // Defined in the build step
141
- serverVersion: "0.10.9",
141
+ serverVersion: "0.10.10",
142
142
  serverDriver: _manifestMiddleware.DEVELOPER_TOOL,
143
143
  serverOS: _os.default.platform(),
144
144
  serverOSVersion: _os.default.release()
@@ -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.10.9",
97
+ source_version: "0.10.10",
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.10.9"
138
+ version: "0.10.10"
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.10.9",
3
+ "version": "0.10.10",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -150,5 +150,5 @@
150
150
  "jest-runner-tsd": "^6.0.0",
151
151
  "tsd": "^0.28.1"
152
152
  },
153
- "gitHead": "4e550a9fb6804351e36f9087aeb84c94d87d631b"
153
+ "gitHead": "877ace22b823159ff94d02bacfb27e523263967c"
154
154
  }