From 137e75ad46465086737b6a397816539d2b77dbe1 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Wed, 8 Nov 2023 09:20:13 -0800 Subject: [PATCH] Refactor Open Summary: Extract our launch UI logic into flipper-server-core. Reviewed By: passy Differential Revision: D51115241 fbshipit-source-id: 185e381eab6b480d86a5e1201f45c070104d0cea --- desktop/flipper-server-core/src/index.tsx | 2 +- .../flipper-server-core/src/utils/openUI.tsx | 59 +++++++++++++++++++ desktop/flipper-server/src/index.tsx | 48 +++------------ 3 files changed, 68 insertions(+), 41 deletions(-) create mode 100644 desktop/flipper-server-core/src/utils/openUI.tsx diff --git a/desktop/flipper-server-core/src/index.tsx b/desktop/flipper-server-core/src/index.tsx index 951b26a67..df488c048 100644 --- a/desktop/flipper-server-core/src/index.tsx +++ b/desktop/flipper-server-core/src/index.tsx @@ -13,13 +13,13 @@ export * from './tracker'; export {loadLauncherSettings} from './utils/launcherSettings'; export {loadProcessConfig} from './utils/processConfig'; export {getEnvironmentInfo} from './utils/environmentInfo'; -export {findInstallation} from './utils/findInstallation'; export {getGatekeepers} from './gk'; export {setupPrefetcher} from './fb-stubs/Prefetcher'; export * from './server/attachSocketServer'; export * from './server/startFlipperServer'; export * from './server/startServer'; export * from './server/utilities'; +export * from './utils/openUI'; export {isFBBuild} from './fb-stubs/constants'; export {initializeLogger} from './fb-stubs/Logger'; diff --git a/desktop/flipper-server-core/src/utils/openUI.tsx b/desktop/flipper-server-core/src/utils/openUI.tsx new file mode 100644 index 000000000..7a4fcb511 --- /dev/null +++ b/desktop/flipper-server-core/src/utils/openUI.tsx @@ -0,0 +1,59 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import open from 'open'; +import {getAuthToken} from '../app-connectivity/certificate-exchange/certificate-utils'; +import {findInstallation} from './findInstallation'; +import {tracker} from '../tracker'; + +export enum UIPreference { + Browser, + PWA, +} + +export async function openUI(preference: UIPreference, port: number) { + console.info('[flipper-server] Launch UI'); + + const token = await getAuthToken(); + console.info( + `[flipper-server] Get authentication token: ${token?.length != 0}`, + ); + + const openInBrowser = async () => { + console.info('[flipper-server] Open in browser'); + const url = new URL(`http://localhost:${port}`); + + console.info(`[flipper-server] Go to: ${url.toString()}`); + + open(url.toString(), {app: {name: open.apps.chrome}}); + + tracker.track('server-open-ui', { + browser: true, + hasToken: token?.length != 0, + }); + }; + + if (preference === UIPreference.Browser) { + await openInBrowser(); + } else { + const path = await findInstallation(); + if (path) { + console.info('[flipper-server] Open in PWA. Location:', path); + tracker.track('server-open-ui', { + browser: false, + hasToken: token?.length != 0, + }); + open(path); + } else { + await openInBrowser(); + } + } + + console.info('[flipper-server] Launch UI completed'); +} diff --git a/desktop/flipper-server/src/index.tsx b/desktop/flipper-server/src/index.tsx index ed49dadf6..ba4ccbc10 100644 --- a/desktop/flipper-server/src/index.tsx +++ b/desktop/flipper-server/src/index.tsx @@ -16,22 +16,22 @@ import {attachDevServer} from './attachDevServer'; import {initializeLogger} from './logger'; import fs from 'fs-extra'; import yargs from 'yargs'; -import open from 'open'; import os from 'os'; import {initCompanionEnv} from 'flipper-server-companion'; import { + UIPreference, checkPortInUse, checkServerRunning, compareServerVersion, getEnvironmentInfo, + openUI, shutdownRunningInstance, startFlipperServer, startServer, tracker, } from 'flipper-server-core'; -import {addLogTailer, isTest, LoggerFormat} from 'flipper-common'; +import {addLogTailer, isProduction, isTest, LoggerFormat} from 'flipper-common'; import exitHook from 'exit-hook'; -import {getAuthToken, findInstallation} from 'flipper-server-core'; const argv = yargs .usage('yarn flipper-server [args]') @@ -295,47 +295,15 @@ async function start() { } async function launch() { - console.info('[flipper-server] Launch UI'); - - const token = await getAuthToken(); - console.info( - `[flipper-server] Get authentication token: ${token?.length != 0}`, - ); - if (!argv.open) { + console.warn( + '[flipper-server] Not opening UI, --open flag was not provided', + ); return; } - const openInBrowser = async () => { - console.info('[flipper-server] Open in browser'); - const url = new URL(`http://localhost:${argv.port}`); - - console.info(`[flipper-server] Go to: ${chalk.blue(url.toString())}`); - - open(url.toString(), {app: {name: open.apps.chrome}}); - - tracker.track('server-open-ui', { - browser: true, - hasToken: token?.length != 0, - }); - }; - - if (argv.bundler) { - await openInBrowser(); - } else { - const path = await findInstallation(); - if (path) { - tracker.track('server-open-ui', { - browser: false, - hasToken: token?.length != 0, - }); - open(path); - } else { - await openInBrowser(); - } - } - - console.info('[flipper-server] Launch UI completed'); + const preference = isProduction() ? UIPreference.PWA : UIPreference.Browser; + openUI(preference, argv.port); } process.on('uncaughtException', (error) => {