UNPKG

electron-sync-state

Version:

`electron-sync-state` 是一个用于在 Electron 主进程和渲染进程之间自动同步状态的库。它利用了 Vue 的响应式系统,以及 Vue 3.5 版本提供的新 API,确保状态在进程间保持一致。该库适用于 Vue 以及 @vue/reactivity 3.5 及以上版本。

56 lines (55 loc) 1.39 kB
import { ipcMain as T, BrowserWindow as f } from "electron"; import { ref as p, watch as d } from "@vue/reactivity"; var a = /* @__PURE__ */ ((e) => (e.GET = "GET", e.SET = "SET", e))(a || {}), u = /* @__PURE__ */ ((e) => (e.SET = "SET", e))(u || {}); function g(e) { return { [a.GET]: `${e}-${a.GET}`, [a.SET]: `${e}-${a.SET}` }; } function h(e) { return { [u.SET]: `${e}-${u.SET}` }; } function i(e) { return JSON.parse(JSON.stringify(e)); } const y = (e, t) => { const l = t.debug === void 0 ? !1 : !!t.debug, o = p(e), E = g(t.channelPrefix), S = h(t.channelPrefix); T.on(E.GET, (r) => { r.reply(S.SET, i(o.value)); }); let n; const c = () => { n = d( () => o.value, (r) => { l && console.log("send change to renderer", JSON.stringify(r)), f.getAllWindows().forEach((s) => { s.webContents.send(S.SET, i(r)); }); }, { deep: !0 } ); }; return c(), T.on(E.SET, (r, s) => { l && console.log("change from renderer", JSON.stringify(s)), n && (n.stop(), n = void 0), o.value = s, c(); }), d(() => o.value, (r) => { t.onChange && t.onChange(i(r)); }), { state: o, syncWatchHandle: { pause: () => { n == null || n.pause(); }, resume: () => { n == null || n.resume(); } } }; }; export { y as createRefSyncState };