@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.
8 lines (7 loc) • 3.76 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/react/useVault.jsx", "../../../src/react/index.js"],
"sourcesContent": ["import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Vault } from \"../class/Vault\";\r\n\r\nconst validateVault = (vault) => {\r\n if (!(vault instanceof Vault)) { throw Error(\"vault must be instance of Vault\"); }\r\n};\r\n\r\n\r\nconst createPort = (vault, redraw, ...a) => {\r\n validateVault(vault);\r\n\r\n let reply, fallback;\r\n\r\n const d = async (action, params, ...e)=>reply = await vault.act(action, params, ...a, ...e);\r\n \r\n const enumerable = true;\r\n const port = Object.defineProperties({}, {\r\n status: { enumerable, get:() => vault.getStatus(...a) },\r\n data: { enumerable, get: () => vault.getData(...a) || fallback },\r\n error: { enumerable, get: () => vault.getError(...a) },\r\n reply: { enumerable, get: () => reply },\r\n confirm: { value:() => { reply = undefined; redraw(Symbol()); } },\r\n set:{ value:async (data, ...e) =>reply = await vault.set(data, ...a, ...e)},\r\n act:{ value:vault.withActions(d, d) },\r\n isStatus: { value:(statuses, ...e) =>vault.isStatus(statuses, ...a, ...e) },\r\n });\r\n\r\n const cleanUp = vault.on((ctx, ...e) => {\r\n for (const i in a) { if (e[i] != a[i]) { return; } }\r\n const { status, before } = ctx;\r\n if (vault.hasRemote) {\r\n if (status === \"init\" || status === \"expired\") { fallback = before.data; vault.get(...a); }\r\n else if (status === \"ready\" || status === \"error\" || status === \"destroyed\") { fallback = undefined; }\r\n }\r\n redraw(Symbol());\r\n });\r\n\r\n vault.get(...a);\r\n\r\n return [ port, cleanUp ];\r\n};\r\n\r\n\r\nexport const useVault = (vault, ...a)=>{\r\n const redraw = useState(0)[1];\r\n\r\n const [ port, cleanUp ] = useMemo(_=>createPort(vault, redraw, ...a), [vault, ...a]);\r\n\r\n useEffect(_=>cleanUp, [cleanUp]);\r\n\r\n return port;\r\n}\r\n\r\n", "import { useVault } from \"./useVault\";\r\n\r\nexport { useVault }\r\n\r\nexport default useVault;"],
"mappings": ";;;;;AAAA,OAAO,SAAS,WAAW,SAAS,gBAAgB;AAGpD,IAAM,gBAAgB,CAAC,UAAU;AAC7B,MAAI,EAAE,iBAAiB,QAAQ;AAAE,UAAM,MAAM,iCAAiC;AAAA,EAAG;AACrF;AAGA,IAAM,aAAa,CAAC,OAAO,WAAW,MAAM;AACxC,gBAAc,KAAK;AAEnB,MAAI,OAAO;AAEX,QAAM,IAAI,OAAO,QAAQ,WAAW,MAAI,QAAQ,MAAM,MAAM,IAAI,QAAQ,QAAQ,GAAG,GAAG,GAAG,CAAC;AAE1F,QAAM,aAAa;AACnB,QAAM,OAAO,OAAO,iBAAiB,CAAC,GAAG;AAAA,IACrC,QAAQ,EAAE,YAAY,KAAI,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE;AAAA,IACtD,MAAM,EAAE,YAAY,KAAK,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,SAAS;AAAA,IAC/D,OAAO,EAAE,YAAY,KAAK,MAAM,MAAM,SAAS,GAAG,CAAC,EAAE;AAAA,IACrD,OAAO,EAAE,YAAY,KAAK,MAAM,MAAM;AAAA,IACtC,SAAS,EAAE,OAAM,MAAM;AAAE,cAAQ;AAAW,aAAO,OAAO,CAAC;AAAA,IAAG,EAAE;AAAA,IAChE,KAAI,EAAE,OAAM,OAAO,SAAS,MAAK,QAAQ,MAAM,MAAM,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,EAAC;AAAA,IAC1E,KAAI,EAAE,OAAM,MAAM,YAAY,GAAG,CAAC,EAAE;AAAA,IACpC,UAAU,EAAE,OAAM,CAAC,aAAa,MAAK,MAAM,SAAS,UAAU,GAAG,GAAG,GAAG,CAAC,EAAE;AAAA,EAC9E,CAAC;AAED,QAAM,UAAU,MAAM,GAAG,CAAC,QAAQ,MAAM;AACpC,eAAW,KAAK,GAAG;AAAE,UAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAAE;AAAA,MAAQ;AAAA,IAAE;AACnD,UAAM,EAAE,QAAQ,OAAO,IAAI;AAC3B,QAAI,MAAM,WAAW;AACjB,UAAI,WAAW,UAAU,WAAW,WAAW;AAAE,mBAAW,OAAO;AAAM,cAAM,IAAI,GAAG,CAAC;AAAA,MAAG,WACjF,WAAW,WAAW,WAAW,WAAW,WAAW,aAAa;AAAE,mBAAW;AAAA,MAAW;AAAA,IACzG;AACA,WAAO,OAAO,CAAC;AAAA,EACnB,CAAC;AAED,QAAM,IAAI,GAAG,CAAC;AAEd,SAAO,CAAE,MAAM,OAAQ;AAC3B;AAGO,IAAM,WAAW,CAAC,UAAU,MAAI;AACnC,QAAM,SAAS,SAAS,CAAC,EAAE,CAAC;AAE5B,QAAM,CAAE,MAAM,OAAQ,IAAI,QAAQ,OAAG,WAAW,OAAO,QAAQ,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;AAEnF,YAAU,OAAG,SAAS,CAAC,OAAO,CAAC;AAE/B,SAAO;AACX;;;AC/CA,IAAO,gBAAQ;",
"names": []
}