UNPKG

@expo/cli

Version:
244 lines (243 loc) 10.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "DevServerManagerActions", { enumerable: true, get: ()=>DevServerManagerActions }); function _chalk() { const data = /*#__PURE__*/ _interopRequireDefault(require("chalk")); _chalk = function() { return data; }; return data; } const _commandsTable = require("./commandsTable"); const _log = /*#__PURE__*/ _interopRequireWildcard(require("../../log")); const _delay = require("../../utils/delay"); const _env = require("../../utils/env"); const _link = require("../../utils/link"); const _open = require("../../utils/open"); const _prompts = require("../../utils/prompts"); const _reactDevToolsProxy = require("../server/ReactDevToolsProxy"); const _jsInspector = require("../server/middleware/inspector/JsInspector"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const debug = require("debug")("expo:start:interface:interactiveActions"); class DevServerManagerActions { constructor(devServerManager, options){ this.devServerManager = devServerManager; this.options = options; } printDevServerInfo(options) { var ref; // If native dev server is running, print its URL. if (this.devServerManager.getNativeDevServerPort()) { const devServer = this.devServerManager.getDefaultDevServer(); try { const nativeRuntimeUrl = devServer.getNativeRuntimeUrl(); const interstitialPageUrl = devServer.getRedirectUrl(); (0, _commandsTable.printQRCode)(interstitialPageUrl != null ? interstitialPageUrl : nativeRuntimeUrl); if (interstitialPageUrl) { _log.log((0, _commandsTable.printItem)((0, _chalk().default)`Choose an app to open your project at {underline ${interstitialPageUrl}}`)); } if (_env.env.__EXPO_E2E_TEST) { // Print the URL to stdout for tests console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({ url: devServer.getDevServerUrl() })}`); } _log.log((0, _commandsTable.printItem)((0, _chalk().default)`Metro waiting on {underline ${nativeRuntimeUrl}}`)); if (options.devClient === false) { // TODO: if development build, change this message! _log.log((0, _commandsTable.printItem)("Scan the QR code above with Expo Go (Android) or the Camera app (iOS)")); } else { _log.log((0, _commandsTable.printItem)("Scan the QR code above to open the project in a development build. " + (0, _link.learnMore)("https://expo.fyi/start"))); } } catch (error) { console.log("err", error); // @ts-ignore: If there is no development build scheme, then skip the QR code. if (error.code !== "NO_DEV_CLIENT_SCHEME") { throw error; } else { const serverUrl = devServer.getDevServerUrl(); _log.log((0, _commandsTable.printItem)((0, _chalk().default)`Metro waiting on {underline ${serverUrl}}`)); _log.log((0, _commandsTable.printItem)(`Linking is disabled because the client scheme cannot be resolved.`)); } } } if ((ref = this.options.platforms) == null ? void 0 : ref.includes("web")) { const webDevServer = this.devServerManager.getWebDevServer(); const webUrl = webDevServer == null ? void 0 : webDevServer.getDevServerUrl({ hostType: "localhost" }); if (webUrl) { _log.log(); _log.log((0, _commandsTable.printItem)((0, _chalk().default)`Web is waiting on {underline ${webUrl}}`)); } } (0, _commandsTable.printUsage)(options, { verbose: false }); (0, _commandsTable.printHelp)(); _log.log(); } async openJsInspectorAsync() { const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl(); const apps = await (0, _jsInspector.queryAllInspectorAppsAsync)(metroServerOrigin); let app = null; if (!apps.length) { return _log.warn((0, _chalk().default)`{bold Debug:} No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine. ${(0, _link.learnMore)("https://docs.expo.dev/guides/using-hermes/")}`); } if (apps.length === 1) { app = apps[0]; } else { var _deviceName; const choices = apps.map((app)=>({ title: (_deviceName = app.deviceName) != null ? _deviceName : "Unknown device", value: app.id, app })); const value = await (0, _prompts.selectAsync)((0, _chalk().default)`Debug target {dim (Hermes only)}`, choices); const menuItem = choices.find((item)=>item.value === value); if (!menuItem) { return _log.error((0, _chalk().default)`{bold Debug:} No device available for "${value}"`); } app = menuItem.app; } if (!app) { return _log.error((0, _chalk().default)`{bold Debug:} No device selected`); } try { await (0, _jsInspector.openJsInspector)(metroServerOrigin, app); } catch (error) { _log.error("Failed to open JavaScript inspector. This is often an issue with Google Chrome."); _log.exception(error); } } reloadApp() { _log.log(`${_commandsTable.BLT} Reloading apps`); // Send reload requests over the dev servers this.devServerManager.broadcastMessage("reload"); } async openMoreToolsAsync() { // Options match: Chrome > View > Developer try { const defaultMenuItems = [ { title: "Inspect elements", value: "toggleElementInspector" }, { title: "Toggle performance monitor", value: "togglePerformanceMonitor" }, { title: "Toggle developer menu", value: "toggleDevMenu" }, { title: "Reload app", value: "reload" }, { title: "Open React devtools", value: "openReactDevTools", action: this.openReactDevToolsAsync.bind(this) } ]; const pluginMenuItems = (await this.devServerManager.devtoolsPluginManager.queryPluginsAsync()).map((plugin)=>({ title: (0, _chalk().default)`Open {bold ${plugin.packageName}}`, value: `devtoolsPlugin:${plugin.packageName}`, action: async ()=>{ const url = new URL(plugin.webpageEndpoint, this.devServerManager.getDefaultDevServer().getUrlCreator().constructUrl({ scheme: "http" })); await (0, _open.openBrowserAsync)(url.toString()); } })); const menuItems = [ ...defaultMenuItems, ...pluginMenuItems ]; const value = await (0, _prompts.selectAsync)((0, _chalk().default)`Dev tools {dim (native only)}`, menuItems); const menuItem = menuItems.find((item)=>item.value === value); if (menuItem == null ? void 0 : menuItem.action) { menuItem.action(); } else if (menuItem == null ? void 0 : menuItem.value) { this.devServerManager.broadcastMessage("sendDevCommand", { name: menuItem.value }); } } catch (error) { debug(error); // do nothing } finally{ (0, _commandsTable.printHelp)(); } } async openReactDevToolsAsync() { await (0, _reactDevToolsProxy.startReactDevToolsProxyAsync)(); const url = this.devServerManager.getDefaultDevServer().getReactDevToolsUrl(); await (0, _open.openBrowserAsync)(url); (0, _reactDevToolsProxy.addReactDevToolsReloadListener)(()=>{ this.reconnectReactDevTools(); }); this.reconnectReactDevTools(); } async reconnectReactDevTools() { // Wait a little time for react-devtools to be initialized in browser await (0, _delay.delayAsync)(3000); this.devServerManager.broadcastMessage("sendDevCommand", { name: "reconnectReactDevTools" }); } toggleDevMenu() { _log.log(`${_commandsTable.BLT} Toggling dev menu`); this.devServerManager.broadcastMessage("devMenu"); } } //# sourceMappingURL=interactiveActions.js.map