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
JavaScript
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
};