Move app/src (mostly) to flipper-ui-core/src
Summary: This diff moves all UI code from app/src to app/flipper-ui-core. That is now slightly too much (e.g. node deps are not removed yet), but from here it should be easier to move things out again, as I don't want this diff to be open for too long to avoid too much merge conflicts. * But at least flipper-ui-core is Electron free :) * Killed all cross module imports as well, as they where now even more in the way * Some unit test needed some changes, most not too big (but emotion hashes got renumbered in the snapshots, feel free to ignore that) * Found some files that were actually meaningless (tsconfig in plugins, WatchTools files, that start generating compile errors, removed those Follow up work: * make flipper-ui-core configurable, and wire up flipper-server-core in Electron instead of here * remove node deps (aigoncharov) * figure out correct place to load GKs, plugins, make intern requests etc., and move to the correct module * clean up deps Reviewed By: aigoncharov Differential Revision: D32427722 fbshipit-source-id: 14fe92e1ceb15b9dcf7bece367c8ab92df927a70
This commit is contained in:
committed by
Facebook GitHub Bot
parent
54b7ce9308
commit
7e50c0466a
@@ -22,15 +22,59 @@ import {
|
||||
clipboard,
|
||||
shell,
|
||||
} from 'electron';
|
||||
import {getRenderHostInstance, setRenderHostInstance} from '../RenderHost';
|
||||
import isProduction from '../utils/isProduction';
|
||||
import type {RenderHost} from 'flipper-ui-core';
|
||||
import fs from 'fs';
|
||||
import {setupMenuBar} from './setupMenuBar';
|
||||
import os from 'os';
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
FlipperRenderHostInstance: RenderHost;
|
||||
}
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === 'development' && os.platform() === 'darwin') {
|
||||
// By default Node.JS has its internal certificate storage and doesn't use
|
||||
// the system store. Because of this, it's impossible to access ondemand / devserver
|
||||
// which are signed using some internal self-issued FB certificates. These certificates
|
||||
// are automatically installed to MacOS system store on FB machines, so here we're using
|
||||
// this "mac-ca" library to load them into Node.JS.
|
||||
global.electronRequire('mac-ca');
|
||||
}
|
||||
|
||||
export function initializeElectron() {
|
||||
const app = remote.app;
|
||||
setRenderHostInstance({
|
||||
const execPath = process.execPath || remote.process.execPath;
|
||||
const isProduction = !/node_modules[\\/]electron[\\/]/.test(execPath);
|
||||
|
||||
function restart(update: boolean = false) {
|
||||
if (isProduction) {
|
||||
if (update) {
|
||||
const options = {
|
||||
args: process.argv
|
||||
.splice(0, 1)
|
||||
.filter((arg) => arg !== '--no-launcher' && arg !== '--no-updater'),
|
||||
};
|
||||
remote.app.relaunch(options);
|
||||
} else {
|
||||
remote.app.relaunch();
|
||||
}
|
||||
remote.app.exit();
|
||||
} else {
|
||||
// Relaunching the process with the standard way doesn't work in dev mode.
|
||||
// So instead we're sending a signal to dev server to kill the current instance of electron and launch new.
|
||||
fetch(
|
||||
`${window.FlipperRenderHostInstance.env.DEV_SERVER_URL}/_restartElectron`,
|
||||
{
|
||||
method: 'POST',
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
window.FlipperRenderHostInstance = {
|
||||
processId: remote.process.pid,
|
||||
isProduction,
|
||||
readTextFromClipboard() {
|
||||
return clipboard.readText();
|
||||
},
|
||||
@@ -95,16 +139,23 @@ export function initializeElectron() {
|
||||
paths: {
|
||||
appPath: app.getAppPath(),
|
||||
homePath: app.getPath('home'),
|
||||
execPath: process.execPath || remote.process.execPath,
|
||||
execPath,
|
||||
staticPath: getStaticDir(),
|
||||
tempPath: app.getPath('temp'),
|
||||
desktopPath: app.getPath('desktop'),
|
||||
},
|
||||
});
|
||||
loadDefaultPlugins: getDefaultPluginsIndex,
|
||||
};
|
||||
|
||||
setupMenuBar();
|
||||
}
|
||||
|
||||
function getDefaultPluginsIndex() {
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
const index = require('../defaultPlugins');
|
||||
return index.default || index;
|
||||
}
|
||||
|
||||
function getStaticDir() {
|
||||
let _staticPath = path.resolve(__dirname, '..', '..', '..', 'static');
|
||||
if (fs.existsSync(_staticPath)) {
|
||||
@@ -118,25 +169,3 @@ function getStaticDir() {
|
||||
}
|
||||
return _staticPath;
|
||||
}
|
||||
|
||||
function restart(update: boolean = false) {
|
||||
if (isProduction()) {
|
||||
if (update) {
|
||||
const options = {
|
||||
args: process.argv
|
||||
.splice(0, 1)
|
||||
.filter((arg) => arg !== '--no-launcher' && arg !== '--no-updater'),
|
||||
};
|
||||
remote.app.relaunch(options);
|
||||
} else {
|
||||
remote.app.relaunch();
|
||||
}
|
||||
remote.app.exit();
|
||||
} else {
|
||||
// Relaunching the process with the standard way doesn't work in dev mode.
|
||||
// So instead we're sending a signal to dev server to kill the current instance of electron and launch new.
|
||||
fetch(`${getRenderHostInstance().env.DEV_SERVER_URL}/_restartElectron`, {
|
||||
method: 'POST',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user