{
  "version": 3,
  "sources": ["../../../src/react/useVault.jsx", "../../../src/react/index.js"],
  "sourcesContent": ["import React, { useEffect, useMemo, useState } from \"react\";\nimport { Vault } from \"../class/Vault\";\n\n/**\n * @preserve\n *\n * @typedef {Object} VaultPort\n * @property {import(\"../class/Vault\").VaultStatus} status Current cell status.\n * @property {*} data Cached data or remote fallback while a refresh is pending.\n * @property {Error|undefined} error Current cell error.\n * @property {*} reply Last result returned by set() or act.*().\n * @property {Function} confirm Clears reply and redraws the hook consumer.\n * @property {(data:*, extra?:Object)=>Promise<*>} set Writes to the bound vault cell.\n * @property {Object} act Action proxy bound to the selected cell.\n * @property {(statuses:string|string[])=>boolean} isStatus Status helper.\n */\n\nconst validateVault = (vault) => {\n    if (!(vault instanceof Vault)) { throw Error(\"vault must be instance of Vault\"); }\n};\n\n\nconst createController = (vault, redraw, path=[], autoInit=true) => {\n    validateVault(vault);\n    const port = vault.at(...path);\n\n    if (port.depth > 0) { throw new Error(`path length must be exactly '${vault.depth}'`); }\n\n    let reply, fallback;\n\n    const d = async (action, data, extra)=>reply = await port.act(action, data, extra);\n    \n    const enumerable = true;\n    const ctrl = Object.defineProperties({}, {\n        status: { enumerable, get:() => port.getStatus() },\n        data: { enumerable, get: () => port.getData() || fallback },\n        error: { enumerable, get: () => port.getError() },\n        reply: { enumerable, get: () => reply },\n        confirm: { value:() => { reply = undefined; redraw(Symbol()); } },\n        set:{ value:async (data, extra) =>reply = await port.set(data, extra)},\n        act:{ value:port.withActions(d, d) },\n        isStatus: { value:statuses=>port.isStatus(statuses) },\n    });\n\n    const cleanUp = port.on(ctx=> {\n        const { status, before } = ctx;\n        if (port.hasRemote) {\n            if (status === \"init\" || status === \"expired\") { fallback = before.data; port.get(); }\n            else if (status === \"ready\" || status === \"error\") { fallback = undefined; }\n        }\n        redraw(Symbol());\n    });\n\n    if (autoInit) { port.get(); }\n\n    return [ ctrl, cleanUp ];\n};\n\n\n/**\n * @preserve\n *\n * React binding for one vault cell.\n *\n * For remote vaults, reset and expiry keep the previous data as a temporary\n * fallback while the hook starts a fresh pull.\n *\n * @param {Vault} vault Vault instance.\n * @param {Array} [path=[]] Cell path.\n * @param {boolean} [autoInit=true] Starts a pull immediately for remote cells.\n * @returns {VaultPort}\n */\nexport const useVault = (vault, path=[], autoInit=true)=>{\n    const redraw = useState(0)[1];\n\n    const [ ctrl, cleanUp ] = useMemo(_=>createController(vault, redraw, path, autoInit), [vault, ...path, autoInit]);\n\n    useEffect(_=>cleanUp, [cleanUp]);\n\n    return ctrl;\n}\n", "import { useVault } from \"./useVault\";\r\n\r\nexport { useVault }\r\n\r\nexport default useVault;"],
  "mappings": ";;;;;AAAA,OAAO,SAAS,WAAW,SAAS,gBAAgB;AAiBpD,IAAM,gBAAgB,CAAC,UAAU;AAC7B,MAAI,EAAE,iBAAiB,QAAQ;AAAE,UAAM,MAAM,iCAAiC;AAAA,EAAG;AACrF;AAGA,IAAM,mBAAmB,CAAC,OAAO,QAAQ,OAAK,CAAC,GAAG,WAAS,SAAS;AAChE,gBAAc,KAAK;AACnB,QAAM,OAAO,MAAM,GAAG,GAAG,IAAI;AAE7B,MAAI,KAAK,QAAQ,GAAG;AAAE,UAAM,IAAI,MAAM,gCAAgC,MAAM,KAAK,GAAG;AAAA,EAAG;AAEvF,MAAI,OAAO;AAEX,QAAM,IAAI,OAAO,QAAQ,MAAM,UAAQ,QAAQ,MAAM,KAAK,IAAI,QAAQ,MAAM,KAAK;AAEjF,QAAM,aAAa;AACnB,QAAM,OAAO,OAAO,iBAAiB,CAAC,GAAG;AAAA,IACrC,QAAQ,EAAE,YAAY,KAAI,MAAM,KAAK,UAAU,EAAE;AAAA,IACjD,MAAM,EAAE,YAAY,KAAK,MAAM,KAAK,QAAQ,KAAK,SAAS;AAAA,IAC1D,OAAO,EAAE,YAAY,KAAK,MAAM,KAAK,SAAS,EAAE;AAAA,IAChD,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,MAAM,UAAS,QAAQ,MAAM,KAAK,IAAI,MAAM,KAAK,EAAC;AAAA,IACrE,KAAI,EAAE,OAAM,KAAK,YAAY,GAAG,CAAC,EAAE;AAAA,IACnC,UAAU,EAAE,OAAM,cAAU,KAAK,SAAS,QAAQ,EAAE;AAAA,EACxD,CAAC;AAED,QAAM,UAAU,KAAK,GAAG,SAAM;AAC1B,UAAM,EAAE,QAAQ,OAAO,IAAI;AAC3B,QAAI,KAAK,WAAW;AAChB,UAAI,WAAW,UAAU,WAAW,WAAW;AAAE,mBAAW,OAAO;AAAM,aAAK,IAAI;AAAA,MAAG,WAC5E,WAAW,WAAW,WAAW,SAAS;AAAE,mBAAW;AAAA,MAAW;AAAA,IAC/E;AACA,WAAO,OAAO,CAAC;AAAA,EACnB,CAAC;AAED,MAAI,UAAU;AAAE,SAAK,IAAI;AAAA,EAAG;AAE5B,SAAO,CAAE,MAAM,OAAQ;AAC3B;AAgBO,IAAM,WAAW,CAAC,OAAO,OAAK,CAAC,GAAG,WAAS,SAAO;AACrD,QAAM,SAAS,SAAS,CAAC,EAAE,CAAC;AAE5B,QAAM,CAAE,MAAM,OAAQ,IAAI,QAAQ,OAAG,iBAAiB,OAAO,QAAQ,MAAM,QAAQ,GAAG,CAAC,OAAO,GAAG,MAAM,QAAQ,CAAC;AAEhH,YAAU,OAAG,SAAS,CAAC,OAAO,CAAC;AAE/B,SAAO;AACX;;;AC5EA,IAAO,gBAAQ;",
  "names": []
}
