From d85f09cbed5f3d2501f791e689011ae127df1cbb Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 9 Jan 2022 20:33:53 +0100 Subject: build: Add prettier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit eslint will also enforce prettier rules, so there is no need to call prettier separately in CI. Signed-off-by: Kristóf Marussy --- packages/preload/esbuild.config.js | 8 +--- .../__tests__/createSophieRenderer.spec.ts | 56 +++++++++++++++------- .../src/contextBridge/createSophieRenderer.ts | 29 ++++++----- packages/preload/tsconfig.json | 10 +--- packages/preload/types/importMeta.d.ts | 2 +- 5 files changed, 62 insertions(+), 43 deletions(-) (limited to 'packages/preload') diff --git a/packages/preload/esbuild.config.js b/packages/preload/esbuild.config.js index 66f5e84..d888987 100644 --- a/packages/preload/esbuild.config.js +++ b/packages/preload/esbuild.config.js @@ -4,15 +4,11 @@ import getEsbuildConfig from '../../config/getEsbuildConfig.js'; export default getEsbuildConfig({ absWorkingDir: fileURLToDirname(import.meta.url), - entryPoints: [ - 'src/index.ts', - ], + entryPoints: ['src/index.ts'], outfile: 'dist/index.cjs', format: 'cjs', platform: 'node', target: chrome, sourcemap: 'inline', - external: [ - 'electron', - ], + external: ['electron'], }); diff --git a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts index a38dbac..f63c3f6 100644 --- a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts +++ b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts @@ -40,9 +40,12 @@ jest.unstable_mockModule('electron', () => ({ const { ipcRenderer } = await import('electron'); -const { default: createSophieRenderer } = await import('../createSophieRenderer'); +const { default: createSophieRenderer } = await import( + '../createSophieRenderer' +); -const event: Electron.IpcRendererEvent = null as unknown as Electron.IpcRendererEvent; +const event: Electron.IpcRendererEvent = + null as unknown as Electron.IpcRendererEvent; const snapshot: SharedStoreSnapshotIn = { shouldUseDarkColors: true, @@ -83,7 +86,10 @@ describe('createSophieRenderer', () => { describe('SharedStoreConnector', () => { let sut: SophieRenderer; - let onSharedStorePatch: (eventArg: Electron.IpcRendererEvent, patchArg: unknown) => void; + let onSharedStorePatch: ( + eventArg: Electron.IpcRendererEvent, + patchArg: unknown, + ) => void; const listener = { // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars onSnapshot: jest.fn((_snapshot: SharedStoreSnapshotIn) => {}), @@ -102,22 +108,25 @@ describe('SharedStoreConnector', () => { it('should request a snapshot from the main process', async () => { mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot); await sut.onSharedStoreChange(listener); - expect(ipcRenderer.invoke).toBeCalledWith(RendererToMainIpcMessage.GetSharedStoreSnapshot); + expect(ipcRenderer.invoke).toBeCalledWith( + RendererToMainIpcMessage.GetSharedStoreSnapshot, + ); expect(listener.onSnapshot).toBeCalledWith(snapshot); }); it('should catch IPC errors without exposing them', async () => { mocked(ipcRenderer.invoke).mockRejectedValue(new Error('s3cr3t')); - await expect(sut.onSharedStoreChange(listener)).rejects.not.toHaveProperty( - 'message', - expect.stringMatching(/s3cr3t/), - ); + await expect( + sut.onSharedStoreChange(listener), + ).rejects.not.toHaveProperty('message', expect.stringMatching(/s3cr3t/)); expect(listener.onSnapshot).not.toBeCalled(); }); it('should not pass on invalid snapshots', async () => { mocked(ipcRenderer.invoke).mockResolvedValueOnce(invalidSnapshot); - await expect(sut.onSharedStoreChange(listener)).rejects.toBeInstanceOf(Error); + await expect(sut.onSharedStoreChange(listener)).rejects.toBeInstanceOf( + Error, + ); expect(listener.onSnapshot).not.toBeCalled(); }); }); @@ -125,7 +134,10 @@ describe('SharedStoreConnector', () => { describe('dispatchAction', () => { it('should dispatch valid actions', () => { sut.dispatchAction(action); - expect(ipcRenderer.send).toBeCalledWith(RendererToMainIpcMessage.DispatchAction, action); + expect(ipcRenderer.send).toBeCalledWith( + RendererToMainIpcMessage.DispatchAction, + action, + ); }); it('should not dispatch invalid actions', () => { @@ -142,7 +154,9 @@ describe('SharedStoreConnector', () => { function itRefusesToRegisterAnotherListener(): void { it('should refuse to register another listener', async () => { - await expect(sut.onSharedStoreChange(listener)).rejects.toBeInstanceOf(Error); + await expect(sut.onSharedStoreChange(listener)).rejects.toBeInstanceOf( + Error, + ); }); } @@ -167,7 +181,9 @@ describe('SharedStoreConnector', () => { }); it('should catch listener errors', () => { - mocked(listener.onPatch).mockImplementation(() => { throw new Error(); }); + mocked(listener.onPatch).mockImplementation(() => { + throw new Error(); + }); onSharedStorePatch(event, patch); }); @@ -175,7 +191,9 @@ describe('SharedStoreConnector', () => { describe('after the listener threw in onPatch', () => { beforeEach(() => { - mocked(listener.onPatch).mockImplementation(() => { throw new Error(); }); + mocked(listener.onPatch).mockImplementation(() => { + throw new Error(); + }); onSharedStorePatch(event, patch); listener.onPatch.mockRestore(); }); @@ -217,7 +235,9 @@ describe('SharedStoreConnector', () => { describe('when a listener failed to register due to listener error', () => { beforeEach(async () => { mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot); - mocked(listener.onSnapshot).mockImplementation(() => { throw new Error(); }); + mocked(listener.onSnapshot).mockImplementation(() => { + throw new Error(); + }); try { await sut.onSharedStoreChange(listener); } catch { @@ -236,15 +256,17 @@ describe('SharedStoreConnector', () => { }; const listener2 = { // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars - onSnapshot: jest.fn((_snapshot: SharedStoreSnapshotIn) => { }), + onSnapshot: jest.fn((_snapshot: SharedStoreSnapshotIn) => {}), // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars - onPatch: jest.fn((_patch: IJsonPatch) => { }), + onPatch: jest.fn((_patch: IJsonPatch) => {}), }; it('should fetch a second snapshot', async () => { mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot2); await sut.onSharedStoreChange(listener2); - expect(ipcRenderer.invoke).toBeCalledWith(RendererToMainIpcMessage.GetSharedStoreSnapshot); + expect(ipcRenderer.invoke).toBeCalledWith( + RendererToMainIpcMessage.GetSharedStoreSnapshot, + ); expect(listener2.onSnapshot).toBeCalledWith(snapshot2); }); diff --git a/packages/preload/src/contextBridge/createSophieRenderer.ts b/packages/preload/src/contextBridge/createSophieRenderer.ts index 2055080..b97503d 100644 --- a/packages/preload/src/contextBridge/createSophieRenderer.ts +++ b/packages/preload/src/contextBridge/createSophieRenderer.ts @@ -37,15 +37,18 @@ class SharedStoreConnector { private listener: SharedStoreListener | null = null; constructor(private readonly allowReplaceListener: boolean) { - ipcRenderer.on(MainToRendererIpcMessage.SharedStorePatch, (_event, patch) => { - try { - // `mobx-state-tree` will validate the patch, so we can safely cast here. - this.listener?.onPatch(patch as IJsonPatch); - } catch (err) { - log.error('Shared store listener onPatch failed', err); - this.listener = null; - } - }); + ipcRenderer.on( + MainToRendererIpcMessage.SharedStorePatch, + (_event, patch) => { + try { + // `mobx-state-tree` will validate the patch, so we can safely cast here. + this.listener?.onPatch(patch as IJsonPatch); + } catch (err) { + log.error('Shared store listener onPatch failed', err); + this.listener = null; + } + }, + ); } async onSharedStoreChange(listener: SharedStoreListener): Promise { @@ -56,7 +59,9 @@ class SharedStoreConnector { let success = false; let snapshot: unknown | null = null; try { - snapshot = await ipcRenderer.invoke(RendererToMainIpcMessage.GetSharedStoreSnapshot); + snapshot = await ipcRenderer.invoke( + RendererToMainIpcMessage.GetSharedStoreSnapshot, + ); success = true; } catch (err) { log.error('Failed to get initial shared store snapshot', err); @@ -87,7 +92,9 @@ function dispatchAction(actionToDispatch: Action): void { } } -export default function createSophieRenderer(allowReplaceListener: boolean): SophieRenderer { +export default function createSophieRenderer( + allowReplaceListener: boolean, +): SophieRenderer { const connector = new SharedStoreConnector(allowReplaceListener); return { onSharedStoreChange: connector.onSharedStoreChange.bind(connector), diff --git a/packages/preload/tsconfig.json b/packages/preload/tsconfig.json index 0cb1390..18c72b4 100644 --- a/packages/preload/tsconfig.json +++ b/packages/preload/tsconfig.json @@ -2,14 +2,8 @@ "extends": "../../config/tsconfig.base.json", "compilerOptions": { "noEmit": true, - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "types": [ - "@types/jest" - ] + "lib": ["dom", "dom.iterable", "esnext"], + "types": ["@types/jest"] }, "references": [ { diff --git a/packages/preload/types/importMeta.d.ts b/packages/preload/types/importMeta.d.ts index 9b73170..ff3b17c 100644 --- a/packages/preload/types/importMeta.d.ts +++ b/packages/preload/types/importMeta.d.ts @@ -3,5 +3,5 @@ interface ImportMeta { DEV: boolean; MODE: string; PROD: boolean; - } + }; } -- cgit v1.2.3-54-g00ecf