From fb7118ff1c8f0dcd61f15e51b193512283d83fa1 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 9 Jan 2022 22:16:29 +0100 Subject: build: Add eslint-plugin-unicorn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristóf Marussy --- packages/main/src/index.ts | 72 ++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 31 deletions(-) (limited to 'packages/main/src/index.ts') diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index 1f80e44..02e6cda 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts @@ -19,9 +19,9 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -import { arch } from 'os'; -import { join } from 'path'; -import { URL } from 'url'; +import { arch } from 'node:os'; +import path from 'node:path'; +import { URL } from 'node:url'; import { ServiceToMainIpcMessage, @@ -101,11 +101,14 @@ app.setAboutPanelOptions({ version: '', }); +// eslint-disable-next-line unicorn/prefer-module -- Electron apps run in a commonjs environment. +const thisDir = __dirname; + function getResourcePath(relativePath: string): string { - return join(__dirname, relativePath); + return path.join(thisDir, relativePath); } -const baseUrl = `file://${__dirname}`; +const baseUrl = `file://${thisDir}`; function getResourceUrl(relativePath: string): string { return new URL(relativePath, baseUrl).toString(); } @@ -117,15 +120,15 @@ const serviceInject: WebSource = { url: getResourceUrl(serviceInjectRelativePath), }; -let mainWindow: BrowserWindow | null = null; +let mainWindow: BrowserWindow | undefined; const store = createMainStore(); init(store) .then((disposeCompositionRoot) => { app.on('will-quit', disposeCompositionRoot); }) - .catch((err) => { - log.log('Failed to initialize application', err); + .catch((error) => { + log.log('Failed to initialize application', error); }); const rendererBaseUrl = getResourceUrl('../renderer/'); @@ -136,7 +139,7 @@ function shouldCancelMainWindowRequest(url: string, method: string): boolean { let normalizedUrl: string; try { normalizedUrl = new URL(url).toString(); - } catch (_err) { + } catch { return true; } if (isDevelopment) { @@ -233,7 +236,7 @@ async function createWindow(): Promise { 'from webContents', event.sender.id, ); - return null; + throw new Error('Invalid IPC call'); } return getSnapshot(store.shared); }); @@ -262,22 +265,22 @@ async function createWindow(): Promise { .then((data) => { serviceInject.code = data; }) - .catch((err) => { - log.error('Error while reloading', serviceInjectPath, err); + .catch((error) => { + log.error('Error while reloading', serviceInjectPath, error); }) .then(() => { browserView.webContents.reload(); }) - .catch((err) => { - log.error('Failed to reload browserView', err); + .catch((error) => { + log.error('Failed to reload browserView', error); }); break; default: log.error('Unexpected action from UI renderer:', actionToDispatch); break; } - } catch (err) { - log.error('Error while dispatching renderer action', rawAction, err); + } catch (error) { + log.error('Error while dispatching renderer action', rawAction, error); } }); @@ -285,9 +288,18 @@ async function createWindow(): Promise { webContents.send(MainToRendererIpcMessage.SharedStorePatch, patch); }); - ipcMain.handle(ServiceToMainIpcMessage.ApiExposedInMainWorld, (event) => - event.sender.id === browserView.webContents.id ? serviceInject : null, - ); + ipcMain.handle(ServiceToMainIpcMessage.ApiExposedInMainWorld, (event) => { + if (event.sender.id !== browserView.webContents.id) { + log.warn( + 'Unexpected', + ServiceToMainIpcMessage.ApiExposedInMainWorld, + 'from webContents', + event.sender.id, + ); + throw new Error('Invalid IPC call'); + } + return serviceInject; + }); browserView.webContents.on('ipc-message', (_event, channel, ...args) => { try { @@ -303,8 +315,8 @@ async function createWindow(): Promise { log.error('Unknown IPC message:', channel, args); break; } - } catch (err) { - log.error('Error while processing IPC message:', channel, args, err); + } catch (error) { + log.error('Error while processing IPC message:', channel, args, error); } }); @@ -316,9 +328,7 @@ async function createWindow(): Promise { browserView.webContents.session.webRequest.onBeforeSendHeaders( ({ url, requestHeaders }, callback) => { - const requestUserAgent = url.match( - /^[^:]+:\/\/accounts\.google\.[^./]+\//, - ) + const requestUserAgent = /^[^:]+:\/\/accounts\.google\.[^./]+\//.test(url) ? chromelessUserAgent : userAgent; callback({ @@ -332,15 +342,15 @@ async function createWindow(): Promise { browserView.webContents .loadURL('https://gitlab.com/say-hi-to-sophie/sophie') - .catch((err) => { - log.error('Failed to load browser', err); + .catch((error) => { + log.error('Failed to load browser', error); }); return mainWindow.loadURL(pageUrl); } app.on('second-instance', () => { - if (mainWindow !== null) { + if (mainWindow !== undefined) { if (!mainWindow.isVisible()) { mainWindow.show(); } @@ -363,14 +373,14 @@ app if (isDevelopment) { try { await installDevToolsExtensions(); - } catch (err) { - log.error('Failed to install devtools extensions', err); + } catch (error) { + log.error('Failed to install devtools extensions', error); } } return createWindow(); }) - .catch((err) => { - log.error('Failed to create window', err); + .catch((error) => { + log.error('Failed to create window', error); process.exit(1); }); -- cgit v1.2.3-70-g09d2