UNPKG

rxdb

Version:

A local-first realtime NoSQL Database for JavaScript applications - https://rxdb.info/

63 lines (59 loc) 1.82 kB
import { Subject } from 'rxjs'; import { getRxStorageRemote, RxStorageRemote, RxStorageRemoteSettings, MessageFromRemote } from '../storage-remote/index.ts'; import { IPC_RENDERER_KEY_PREFIX } from './electron-helper.ts'; import { PROMISE_RESOLVE_VOID } from '../utils/index.ts'; export type RxStorageIpcRendererSettings = { /** * Set the same key on both sides * to ensure that messages do not get mixed * up when you use more then one storage. */ key: string; ipcRenderer: any; mode: RxStorageRemoteSettings['mode']; }; export type RxStorageIpcRenderer = RxStorageRemote; export function getRxStorageIpcRenderer( settings: RxStorageIpcRendererSettings ): RxStorageIpcRenderer { const channelId = [ IPC_RENDERER_KEY_PREFIX, settings.key ].join('|'); const storage = getRxStorageRemote({ identifier: 'electron-ipc-renderer', mode: settings.mode, messageChannelCreator() { const messages$ = new Subject<MessageFromRemote>(); const listener = (_event: any, message: any) => { messages$.next(message); }; settings.ipcRenderer.on(channelId, listener); settings.ipcRenderer.postMessage( channelId, false ); return Promise.resolve({ messages$, send(msg) { settings.ipcRenderer.postMessage( channelId, msg ); }, close() { settings.ipcRenderer.removeListener(channelId, listener); return PROMISE_RESOLVE_VOID; } }); }, }); return storage; }