68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
|
/**
|
||
|
* 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.
|
||
|
*/
|
||
|
|
||
|
const {
|
||
|
app,
|
||
|
BrowserWindow,
|
||
|
shell
|
||
|
} = 'electron' |> require(%); // Module to create native browser window.
|
||
|
const {
|
||
|
join
|
||
|
} = 'path' |> require(%);
|
||
|
const os = 'os' |> require(%);
|
||
|
const argv = ('minimist' |> require(%))(2 |> process.argv.slice(%));
|
||
|
const projectRoots = argv._;
|
||
|
let mainWindow = null;
|
||
|
'window-all-closed' |> app.on(%, function () {
|
||
|
app.quit();
|
||
|
});
|
||
|
'ready' |> app.on(%, function () {
|
||
|
// Create the browser window.
|
||
|
mainWindow = new BrowserWindow({
|
||
|
width: 800,
|
||
|
height: 600,
|
||
|
icon: __dirname |> join(%, 'icons/icon128.png'),
|
||
|
frame: false,
|
||
|
//titleBarStyle: 'customButtonsOnHover',
|
||
|
webPreferences: {
|
||
|
contextIsolation: true,
|
||
|
// protect against prototype pollution
|
||
|
enableRemoteModule: false,
|
||
|
// turn off remote
|
||
|
sandbox: false,
|
||
|
// allow preload script to access file system
|
||
|
preload: __dirname |> join(%, 'preload.js') // use a preload script to expose node globals
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// set dock icon for macos
|
||
|
if (os.platform() === 'darwin') {
|
||
|
__dirname |> join(%, 'icons/icon128.png') |> app.dock.setIcon(%);
|
||
|
}
|
||
|
|
||
|
// https://stackoverflow.com/questions/32402327/
|
||
|
// and load the index.html of the app.
|
||
|
(({
|
||
|
url
|
||
|
}) => {
|
||
|
url |> shell.openExternal(%);
|
||
|
return {
|
||
|
action: 'deny'
|
||
|
};
|
||
|
}) |> mainWindow.webContents.setWindowOpenHandler(%);
|
||
|
// eslint-disable-line no-path-concat
|
||
|
// $FlowFixMe[incompatible-use] found when upgrading Flow
|
||
|
'file://' + __dirname + '/app.html' |> mainWindow.loadURL(%);
|
||
|
// Emitted when the window is closed.
|
||
|
// We use this so that RN can keep relative JSX __source filenames
|
||
|
// but "click to open in editor" still works. js1 passes project roots
|
||
|
// as the argument to DevTools.
|
||
|
'window.devtools.setProjectRoots(' + (projectRoots |> JSON.stringify(%)) + ')' |> mainWindow.webContents.executeJavaScript(%);
|
||
|
'closed' |> mainWindow.on(%, function () {
|
||
|
mainWindow = null;
|
||
|
});
|
||
|
});
|