UNPKG

@randajan/vault-kit

Version:

A tiny and universal data vault that behaves like a writable file system. Store, sync, forget. Works on client and server.

67 lines (64 loc) 1.97 kB
import { Vault } from "../chunk-LBGEVRAJ.js"; // src/react/useVault.jsx import React, { useEffect, useMemo, useState } from "react"; var validateVault = (vault) => { if (!(vault instanceof Vault)) { throw Error("vault must be instance of Vault"); } }; var createPort = (vault, redraw, ...a) => { validateVault(vault); let reply, fallback; const d = async (action, params, ...e) => reply = await vault.act(action, params, ...a, ...e); const enumerable = true; const port = Object.defineProperties({}, { status: { enumerable, get: () => vault.getStatus(...a) }, data: { enumerable, get: () => vault.getData(...a) || fallback }, error: { enumerable, get: () => vault.getError(...a) }, reply: { enumerable, get: () => reply }, confirm: { value: () => { reply = void 0; redraw(Symbol()); } }, set: { value: async (data, ...e) => reply = await vault.set(data, ...a, ...e) }, act: { value: vault.withActions(d, d) }, isStatus: { value: (statuses, ...e) => vault.isStatus(statuses, ...a, ...e) } }); const cleanUp = vault.on((ctx, ...e) => { for (const i in a) { if (e[i] != a[i]) { return; } } const { status, before } = ctx; if (vault.hasRemote) { if (status === "init" || status === "expired") { fallback = before.data; vault.get(...a); } else if (status === "ready" || status === "error") { fallback = void 0; } } redraw(Symbol()); }); vault.get(...a); return [port, cleanUp]; }; var useVault = (vault, ...a) => { const redraw = useState(0)[1]; const [port, cleanUp] = useMemo((_) => createPort(vault, redraw, ...a), [vault, ...a]); useEffect((_) => cleanUp, [cleanUp]); return port; }; Vault.prototype.use = function(...a) { return useVault(this, ...a); }; // src/react/index.js var react_default = useVault; export { react_default as default, useVault }; //# sourceMappingURL=index.js.map