diff options
Diffstat (limited to 'packages/preload/src/contextBridge/createSophieRenderer.ts')
-rw-r--r-- | packages/preload/src/contextBridge/createSophieRenderer.ts | 29 |
1 files changed, 18 insertions, 11 deletions
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 { | |||
37 | private listener: SharedStoreListener | null = null; | 37 | private listener: SharedStoreListener | null = null; |
38 | 38 | ||
39 | constructor(private readonly allowReplaceListener: boolean) { | 39 | constructor(private readonly allowReplaceListener: boolean) { |
40 | ipcRenderer.on(MainToRendererIpcMessage.SharedStorePatch, (_event, patch) => { | 40 | ipcRenderer.on( |
41 | try { | 41 | MainToRendererIpcMessage.SharedStorePatch, |
42 | // `mobx-state-tree` will validate the patch, so we can safely cast here. | 42 | (_event, patch) => { |
43 | this.listener?.onPatch(patch as IJsonPatch); | 43 | try { |
44 | } catch (err) { | 44 | // `mobx-state-tree` will validate the patch, so we can safely cast here. |
45 | log.error('Shared store listener onPatch failed', err); | 45 | this.listener?.onPatch(patch as IJsonPatch); |
46 | this.listener = null; | 46 | } catch (err) { |
47 | } | 47 | log.error('Shared store listener onPatch failed', err); |
48 | }); | 48 | this.listener = null; |
49 | } | ||
50 | }, | ||
51 | ); | ||
49 | } | 52 | } |
50 | 53 | ||
51 | async onSharedStoreChange(listener: SharedStoreListener): Promise<void> { | 54 | async onSharedStoreChange(listener: SharedStoreListener): Promise<void> { |
@@ -56,7 +59,9 @@ class SharedStoreConnector { | |||
56 | let success = false; | 59 | let success = false; |
57 | let snapshot: unknown | null = null; | 60 | let snapshot: unknown | null = null; |
58 | try { | 61 | try { |
59 | snapshot = await ipcRenderer.invoke(RendererToMainIpcMessage.GetSharedStoreSnapshot); | 62 | snapshot = await ipcRenderer.invoke( |
63 | RendererToMainIpcMessage.GetSharedStoreSnapshot, | ||
64 | ); | ||
60 | success = true; | 65 | success = true; |
61 | } catch (err) { | 66 | } catch (err) { |
62 | log.error('Failed to get initial shared store snapshot', err); | 67 | log.error('Failed to get initial shared store snapshot', err); |
@@ -87,7 +92,9 @@ function dispatchAction(actionToDispatch: Action): void { | |||
87 | } | 92 | } |
88 | } | 93 | } |
89 | 94 | ||
90 | export default function createSophieRenderer(allowReplaceListener: boolean): SophieRenderer { | 95 | export default function createSophieRenderer( |
96 | allowReplaceListener: boolean, | ||
97 | ): SophieRenderer { | ||
91 | const connector = new SharedStoreConnector(allowReplaceListener); | 98 | const connector = new SharedStoreConnector(allowReplaceListener); |
92 | return { | 99 | return { |
93 | onSharedStoreChange: connector.onSharedStoreChange.bind(connector), | 100 | onSharedStoreChange: connector.onSharedStoreChange.bind(connector), |