From 3b7d52abb0e7de00bdf92ee3482a4cae1f6b7d64 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 3 Jan 2022 01:02:00 +0100 Subject: feat: Add Profile and Service stores MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the main process, it is optional to specify the ID of a Profile or a Service. The missing ID will be filled in with a randomly generated one. Moreover, services without a profile will get a profile generated with the same name. Signed-off-by: Kristóf Marussy --- .../__tests__/createSophieRenderer.spec.ts | 27 ---------------------- .../src/contextBridge/createSophieRenderer.ts | 15 +++++------- 2 files changed, 6 insertions(+), 36 deletions(-) (limited to 'packages/preload/src/contextBridge') diff --git a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts index 88b0077..2652c4e 100644 --- a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts +++ b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts @@ -51,10 +51,6 @@ const snapshot: SharedStoreSnapshotIn = { shouldUseDarkColors: true, }; -const invalidSnapshot = { - shouldUseDarkColors: -1, -} as unknown as SharedStoreSnapshotIn; - const patch: IJsonPatch = { op: 'replace', path: 'foo', @@ -121,14 +117,6 @@ describe('SharedStoreConnector', () => { ).rejects.not.toHaveProperty('message', expect.stringMatching(/s3cr3t/)); expect(listener.onSnapshot).not.toHaveBeenCalled(); }); - - it('should not pass on invalid snapshots', async () => { - mocked(ipcRenderer.invoke).mockResolvedValueOnce(invalidSnapshot); - await expect(sut.onSharedStoreChange(listener)).rejects.toBeInstanceOf( - Error, - ); - expect(listener.onSnapshot).not.toHaveBeenCalled(); - }); }); describe('dispatchAction', () => { @@ -220,21 +208,6 @@ describe('SharedStoreConnector', () => { itDoesNotPassPatchesToTheListener(); }); - describe('when a listener failed to register due to an invalid snapshot', () => { - beforeEach(async () => { - mocked(ipcRenderer.invoke).mockResolvedValueOnce(invalidSnapshot); - try { - await sut.onSharedStoreChange(listener); - } catch { - // Ignore error. - } - }); - - itRefusesToRegisterAnotherListener(); - - itDoesNotPassPatchesToTheListener(); - }); - describe('when a listener failed to register due to listener error', () => { beforeEach(async () => { mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot); diff --git a/packages/preload/src/contextBridge/createSophieRenderer.ts b/packages/preload/src/contextBridge/createSophieRenderer.ts index 3174fed..41accfd 100644 --- a/packages/preload/src/contextBridge/createSophieRenderer.ts +++ b/packages/preload/src/contextBridge/createSophieRenderer.ts @@ -23,8 +23,8 @@ import { action, MainToRendererIpcMessage, RendererToMainIpcMessage, - sharedStore, SharedStoreListener, + SharedStoreSnapshotIn, SophieRenderer, } from '@sophie/shared'; import { ipcRenderer } from 'electron'; @@ -66,15 +66,12 @@ class SharedStoreConnector { } catch (error) { log.error('Failed to get initial shared store snapshot', error); } - if (success) { - if (sharedStore.is(snapshot)) { - listener.onSnapshot(snapshot); - this.listener = listener; - return; - } - log.error('Got invalid initial shared store snapshot', snapshot); + if (!success) { + throw new Error('Failed to connect to shared store'); } - throw new Error('Failed to connect to shared store'); + // `mobx-state-tree` will validate the snapshot, so we can safely cast here. + listener.onSnapshot(snapshot as SharedStoreSnapshotIn); + this.listener = listener; } } -- cgit v1.2.3-54-g00ecf