{
  "version": 3,
  "sources": ["../../src/index.js", "../../src/tools.js", "../../src/formats.js", "../../src/class/VaultPort.js", "../../src/class/Cell.js", "../../src/class/Cells.js", "../../src/class/Handlers.js", "../../src/class/VaultPrivate.js", "../../src/class/Vault.js"],
  "sourcesContent": ["import { Vault } from \"./class/Vault\";\n\nexport { Vault }\n\n/**\n * @preserve\n *\n * Creates a new vault instance.\n *\n * @param {import(\"./class/Vault\").VaultOptions} [options={}] Vault configuration.\n * @returns {Vault}\n */\nexport default (options={})=>new Vault(options);\n", "\r\nexport const ice = Object.freeze;\r\n\r\nexport const is = (type, any)=>typeof type === \"string\" ? (typeof any === type) : (any instanceof type);\r\nexport const to = (type, any, errorName, req=false)=>{\r\n    if (is(type, any)) { return any; }\r\n    if (!req && (any == null || !errorName)) { return; }\r\n    throw new TypeError(`Expected ${errorName} to be a '${type}', got '${typeof any}'`);\r\n}\r\n\r\n\r\n\r\n\r\nexport const toFn = (any, errorName, req=false)=>to(\"function\", any, errorName, req);\r\nexport const toObj = (any, errorName, req=false)=>to(\"object\", any, errorName, req);\r\nexport const toBol = (any, errorName, req=false)=>to(\"boolean\", any, errorName, req);\r\nexport const toStr = (any, errorName, req=false)=>to(\"string\", any, errorName, req);\r\nexport const toNum = (any, errorName, req=false)=>to(\"number\", any, errorName, req);\r\nexport const toArr = (any, errorName, req=false)=>to(Array, any, errorName, req);\r\n\r\nexport const toRng = (any, min, max, errorName, req=false)=>{\r\n    const num = toNum(any, errorName, req);\r\n    if (num == null) { return; }\r\n    if (num < min) { throw new Error(`Expected ${errorName} to be greater than '${min}' got '${num}'`); }\r\n    if (num > max) { throw new Error(`Expected ${errorName} to be lesser than '${max}' got '${num}'`); }\r\n    return num;\r\n}\r\n\r\n\r\nexport const toExtra = (extra)=>toObj(extra, \"extra\", true);", "\r\n//status\r\n//init, push, pull, error, ready, expired\r\n\r\nimport { withTimeout } from \"@randajan/sleep\";\r\nimport { ice, toArr, toBol, toFn, toNum, toObj, toRng, toStr } from \"./tools\";\r\n\r\n\r\n/**\r\n * @preserve\r\n *\r\n * Normalizes remote options and wraps pull/push in @randajan/sleep.withTimeout.\r\n *\r\n * This is the critical timer boundary: remote timeout timers are cleaned up by\r\n * the sleep package when the wrapped promise settles, and timeout:0 preserves\r\n * the raw remote functions.\r\n *\r\n * @param {Object|undefined} remote User-provided remote options.\r\n * @param {boolean} [reqPreserveAction=false] Whether preserveAction is required.\r\n * @returns {Object|undefined}\r\n */\r\nexport const formatRemote = (remote, reqPreserveAction=false) => {\r\n    const m = \"options.remote\";\r\n    remote = toObj(remote, m);\r\n    if (!remote) { return; }\r\n\r\n    const timeout = remote.timeout = toRng(remote.timeout, 0, 2147483647, m + \".timeout\") ?? 5000;\r\n    const push = toFn(remote.push, m + \".push\");\r\n    const pull = toFn(remote.pull, m + \".pull\", true);\r\n    remote.init = toFn(remote.init, m + \".init\");\r\n    remote.destroy = toFn(remote.destroy, m + \".destroy\");\r\n    remote.push = !push || !timeout ? push : (...args)=>withTimeout(push(...args), timeout);\r\n    remote.pull = !timeout ? pull : (...args)=>withTimeout(pull(...args), timeout);\r\n    remote.preserveAction = toBol(remote.preserveAction, m + \".preserveAction\", reqPreserveAction);\r\n\r\n    return remote;\r\n}\r\n\r\n\r\n\r\n/**\r\n * @preserve\r\n *\r\n * Creates the result splitter used after local set() and remote push().\r\n *\r\n * It lets callers receive the whole operation result while the vault stores\r\n * only the selected data fragment.\r\n *\r\n * @param {Function|string|undefined} fold Extractor function or property name.\r\n * @param {string} errorName Name used in validation errors.\r\n * @param {boolean} [req=false] Whether identity unfolding is required.\r\n * @returns {Function|undefined}\r\n */\r\nexport const formatUnfold = (fold, errorName, req=false)=>{\r\n    const f = toFn(fold);\r\n    if (f) { return f; }\r\n    let prop = toStr(fold, errorName);\r\n    if (prop) { return (r=>[r[prop], r]); }\r\n    if (req) { return (r=>[r, r]); }\r\n}\r\n\r\n\r\n/**\r\n * @preserve\r\n *\r\n * Builds the local action dispatcher behind vault.act().\r\n *\r\n * The preserveAction flag decides whether a local action result replaces\r\n * data inside the original action envelope or becomes the direct push data.\r\n *\r\n * @param {Object.<string, Function>|undefined} actions Local action handlers.\r\n * @param {boolean|undefined} preserveAction Whether to keep { action, data } after a handler runs.\r\n * @param {Function} actionsCatch Optional action error mapper.\r\n * @returns {Function}\r\n */\r\nexport const formatActions = (actions, preserveAction, actionsCatch) => {\r\n    if (!actions) { return req=>req; }\r\n\r\n    const ac = toFn(actionsCatch, \"options.actionsCatch\");\r\n\r\n    return async (req, path, extra={}) => {\r\n        const { action, data:input } = toObj(req, \"request\", true);\r\n\r\n        if (!action) { throw new Error(`Action is required`); }\r\n\r\n        const act = actions[action];\r\n        if (!act) { throw new Error(`Action '${action}' is not defined`); }\r\n\r\n        let output;\r\n        try { output = await act(ice({...extra, data:input, path})); }\r\n        catch(err) {\r\n            if (!ac) { throw err; }\r\n            output = await ac(err);\r\n        }\r\n\r\n        return preserveAction ? ice({ action, data:output }) : output;\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * @preserve\r\n *\r\n * Normalizes and validates a vault path.\r\n *\r\n * Empty paths are allowed for single-cell vaults. Addressed vaults require\r\n * arrays, and passive init updates can require an exact path length.\r\n *\r\n * @param {Array|undefined} path User-provided path.\r\n * @param {number} depth Vault depth.\r\n * @param {boolean} [exactOnly=false] Whether path length must equal depth.\r\n * @param {number} [baseLevel=0] Level used only for error messages.\r\n * @returns {ReadonlyArray}\r\n */\r\nexport const formatPath = (path, depth, exactOnly=false, baseLevel=0)=>{\r\n    path = ice(toArr(path, \"path\", depth > 0) || []);\r\n\r\n    const isValid = exactOnly ? path.length == depth : path.length <= depth;\r\n    if (isValid) { return path; }\r\n\r\n    const m = exactOnly ? \"fixed length\" : \"length less then\";\r\n    throw new Error(`Expected 'path' to be an array of ${m} '${depth - baseLevel}'`);\r\n\r\n}\r\n", "import { formatPath } from \"../formats\";\r\nimport { ice, toExtra, toFn, toObj } from \"../tools\";\r\nimport { _privates } from \"./Vault\";\r\n\r\nconst notHasMany = (vint, methodName) => {\r\n    if (!vint.hasMany) { return; }\r\n    throw new Error(`Method '${methodName}' is not available for interface that hasMany=true`);\r\n}\r\n\r\nexport class VaultPort {\r\n\r\n    constructor(_vault, path = [], baseLevel=0) {\r\n\r\n        path = formatPath(path, _vault.depth, false, baseLevel);\r\n        const level = path.length;\r\n        const depth = _vault.depth - level;\r\n\r\n\r\n        const enumerable = true;\r\n        Object.defineProperty(this, \"path\", { enumerable, value: path });\r\n        Object.defineProperty(this, \"level\", { enumerable, value:level });\r\n        Object.defineProperty(this, \"depth\", { enumerable, value:depth });\r\n        Object.defineProperty(this, \"hasMany\", { enumerable, value:depth > 0 });\r\n        Object.defineProperty(this, \"hasRemote\", {enumerable, value:!!_vault.remote});\r\n\r\n        const act = this.act.bind(this);\r\n        this.act = this.withActions(act, act);\r\n\r\n        _privates.set(this, _vault);\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Returns a port bound to a deeper path.\r\n     *\r\n     * @param {...*} path Path segments to append.\r\n     * @returns {VaultPort}\r\n     */\r\n    at(...path) {\r\n        if (!path.length) { return this; }\r\n        const _vault = _privates.get(this);\r\n        return new VaultPort(_vault, [...this.path, ...path], this.level);\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Returns the current cell status without starting a remote pull.\r\n     *\r\n     * @returns {VaultStatus}\r\n     */\r\n    getStatus() {\r\n        notHasMany(this, \"getStatus\");\r\n        return _privates.get(this).store.pick(this.path)?.status || \"init\";\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Returns cached data without starting a remote pull.\r\n     *\r\n     * @returns {*}\r\n     */\r\n    getData() {\r\n        notHasMany(this, \"getData\");\r\n        return _privates.get(this).store.pick(this.path)?.data;\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Returns the current cell error, if any.\r\n     *\r\n     * @returns {Error|undefined}\r\n     */\r\n    getError() {\r\n        notHasMany(this, \"getError\");\r\n        return _privates.get(this).store.pick(this.path)?.error;\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Checks the current cell status.\r\n     *\r\n     * @param {VaultStatus|VaultStatus[]} statuses Expected status or statuses.\r\n     * @returns {boolean}\r\n     */\r\n    isStatus(statuses) {\r\n        const s = this.getStatus();\r\n        return Array.isArray(statuses) ? statuses.includes(s) : (s === statuses);\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Returns cached data or starts a remote pull when needed.\r\n     *\r\n     * @param {Object} [extra={}] Custom fields added to the emitted context and remote packet.\r\n     * @returns {Promise<*>}\r\n     */\r\n    async get(extra={}) {\r\n        notHasMany(this, \"get\");\r\n        return _privates.get(this).store.get(this.path, toExtra(extra));\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Resolves whether get() returns a non-undefined value.\r\n     *\r\n     * @param {Object} [extra={}] Custom fields added to the emitted context and remote packet.\r\n     * @returns {Promise<boolean>}\r\n     */\r\n    async has(extra={}) {\r\n        notHasMany(this, \"has\");\r\n        return (await this.get(extra)) !== undefined;\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Stores data locally or pushes it through the configured remote.\r\n     *\r\n     * @param {*} data Data to store or push.\r\n     * @param {Object} [extra={}] Custom fields added to the emitted context and remote packet.\r\n     * @returns {Promise<*>}\r\n     */\r\n    async set(data, extra={}) {\r\n        notHasMany(this, \"set\");\r\n        const { readonly, store } = _privates.get(this);\r\n        if (readonly) { throw new Error(`Set is not allowed`); }\r\n        return store.set(data, this.path, toExtra(extra));\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Sends an action request through the same write pipeline as set().\r\n     *\r\n     * @param {string} action Action name.\r\n     * @param {*} data Action data.\r\n     * @param {Object} [extra={}] Custom fields added to the emitted context and remote packet.\r\n     * @returns {Promise<*>}\r\n     */\r\n    async act(action, data, extra={}) {\r\n        notHasMany(this, \"act\");\r\n        const { readonly, store } = _privates.get(this);\r\n        if (readonly) { throw new Error(`Actions are not allowed`); }\r\n        return store.set(ice({ action, data }), this.path, toExtra(extra));\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Resets one cell to init.\r\n     *\r\n     * @param {Object} [extra={}] Custom fields added to the emitted context.\r\n     * @returns {this}\r\n     */\r\n    reset(extra={}) {\r\n        _privates.get(this).store.reset(\"init\", this.path, toExtra(extra));\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Destroys the bound cell or subtree and runs remote cleanup.\r\n     *\r\n     * Destroy is intentionally terminal: future access to destroyed cells throws.\r\n     *\r\n     * @param {Object} [extra={}] Custom fields added to the emitted context and remote destroy packet.\r\n     * @returns {this}\r\n     */\r\n    destroy(extra={}) {\r\n        _privates.get(this).store.reset(\"destroyed\", this.path, toExtra(extra));\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Iterates cached cells. In hasMany mode, untouched init cells are skipped.\r\n     *\r\n     * @param {(ctx:{ status:VaultStatus, data:*, error:*, path:Array })=>*} exe Iterator.\r\n     * @param {Object} [extra={}] Custom fields added to each iterator context.\r\n     * @returns {void}\r\n     */\r\n    forEach(exe, extra={}) {\r\n        const { store } = _privates.get(this);\r\n        return store.forEach(exe, this.path, toExtra(extra));\r\n    }\r\n\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Subscribes to vault changes.\r\n     *\r\n     * @param {VaultListener} fn Listener.\r\n     * @returns {Function} Unsubscribe function.\r\n     */\r\n    on(fn) {\r\n        return _privates.get(this).handlers.on(fn, this.path);\r\n    }\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Subscribes to the next vault change only.\r\n     *\r\n     * @param {VaultListener} fn Listener.\r\n     * @returns {Function} Unsubscribe function.\r\n     */\r\n    once(fn) {\r\n        return _privates.get(this).handlers.once(fn, this.path);\r\n    }\r\n\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * Adds property-based action calls to a function or object.\r\n     *\r\n     * Missing properties become calls to execute(prop, data, extra), which\r\n     * powers vault.act.someAction(data, extra).\r\n     *\r\n     * @param {Function|Object} target Target to proxy.\r\n     * @param {Function} [execute=this.act] Action executor.\r\n     * @returns {Function|Object}\r\n     */\r\n    withActions(target, execute) {\r\n        const d = toFn(execute, \"second argument\") || this.act;\r\n\r\n        return new Proxy(target, {\r\n            get(t, action, receiver) {\r\n                const val = Reflect.get(t, action, receiver);\r\n                if (val !== undefined) { return val; }\r\n                return (data, extra={}) => d(action, data, extra);\r\n            }\r\n        });\r\n    }\r\n\r\n}\r\n", "import { ice } from \"../tools\";\n\n\nexport class Cell {\n\n    constructor(_vault, unmount=()=>{}) {\n        this.status = \"init\";\n        this._vault = _vault;\n        this.unmountSelf = unmount;\n    }\n\n    isDestroyed(throwError=true) {\n        if (this.status !== \"destroyed\") { return false; }\n        if (!throwError) { return true; }\n        throw new Error(\"Was destroyed before\");\n    }\n\n    isExpired() { return this.expiresAt && (this.expiresAt < Date.now()); }\n\n    onSet(persistent, before={}, path=[], extra={}, batched=undefined) {\n        const { _vault, status, data, error, currentTimeoutId } = this;\n        const { ttl, handlers } = _vault;\n\n        if (currentTimeoutId != null) { clearInterval(currentTimeoutId); }\n        if (persistent) { delete this.expiresAt; }\n        else if (ttl > 0) {\n            this.expiresAt = Date.now() + ttl;\n            const tid = this.currentTimeoutId = setTimeout(_=>this.pick(path), ttl);\n            tid.unref?.();\n        }\n\n        const event = ice({\n            ...extra,\n            status,\n            data,\n            error,\n            before:ice(before),\n            path,\n            batch:batched ? \"item\" : undefined\n        });\n\n        batched?.push(event);\n        \n        return handlers.run(event);\n    }\n\n    async fetchRemote(status, data, path=[], extra={}) {\n        try {\n            const { push, pull } = this._vault.remote;\n            const isPush = status === \"push\";\n\n            const prom = isPush\n                ? push(ice({...extra, path, data, pull:_=>pull(ice({...extra, path}))}))\n                : pull(ice({...extra, path}));\n\n            return this.setReady(isPush, await prom, path, extra);\n        } catch(err) {\n            throw this.setError(err, path, extra);\n        }\n    };\n\n    setProm(status, data, path=[], extra={}) {\n        const { data:d, status:s } = this;\n\n        this.status = status;\n        this.prom = this.fetchRemote(status, data, path, extra);\n        delete this.error;\n\n        this.onSet(true, { data:d, status:s }, path, extra);\n        return this.prom;\n    }\n\n    setError(err, path=[], extra={}) {\n        const { data:d, status:s } = this;\n\n        this.status = \"error\"\n        this.error = err;\n        delete this.prom;\n\n        this.onSet(false, { data:d, status:s }, path, extra);\n        return err;\n    }\n\n    async setReady(isResponse, data, path=[], extra={}) {\n        const { _vault, data:d, status:s } = this;\n        const { unfold, trait, purge } = _vault;\n\n        let res = data;\n        \n        if (unfold && isResponse) { [data, res] = await unfold(data); }\n\n        if (this.data != null) { purge(this.data); }\n        this.data = await trait(data, res);\n\n        this.status = \"ready\";\n        delete this.error;\n        delete this.prom;\n\n        this.onSet(false, { data:d, status:s }, path, extra);\n\n        return res;\n    }\n\n    pick(path=[]) {\n        if (this.isExpired()) { this.reset(\"expired\", path); }\n        return this;\n    }\n\n    async setInit(data, path=[], extra={}) {\n        this.isDestroyed();\n        return this.setReady(false, data, path, extra);\n    }\n\n    async get(path=[], extra={}) {\n        this.isDestroyed();\n\n        const { _vault, status, data, prom } = this.pick(path);\n        const { remote } = _vault;\n        \n        if (status === \"ready\") { return data; }\n        if (!remote) { return; }\n        if (status === \"pull\") { return prom; } //same same\n        if (status === \"push\") { await prom; return this.data; }\n\n        return this.setProm(\"pull\", undefined, path, extra); //packet\n    }\n\n    async set(data, path=[], extra={}) {\n        this.isDestroyed();\n\n        const { _vault, prom } = this;\n        const { remote, act } = _vault;\n\n        if (!remote) { return this.setReady(true, await act(data, path, extra), path, extra); }\n\n        const push = async _=>this.setProm(\"push\", await act(data, path, extra), path, extra);\n        return !prom ? push() : (this.prom = this.prom.then(push));\n    }\n\n    reset(status, path=[], extra={}, batched=undefined) {\n        this.isDestroyed();\n\n        const { _vault, data:d, status:s } = this;\n        const { purge } = _vault;\n\n        try {\n            if (this.data != null) { purge(this.data); }\n        } catch(err) {\n            throw this.setError(err, path, extra);\n        }\n\n        this.status = status;\n        delete this.data;\n        delete this.prom;\n        delete this.error;\n        delete this.expiresAt;\n\n        if (status !== \"destroyed\") { this.unmountSelf(path); }\n        this.onSet(true, { status:s, data:d }, path, extra, batched);\n\n        return 1;\n    }\n\n    forEach(exe, path=[], extra={}) {     \n        this.isDestroyed();\n\n        const { status, data, error } = this.pick(path);\n        exe(ice({ ...extra, status, data, error, path }));\n    }\n\n}\n", "import { ice } from \"../tools\";\nimport { Cell } from \"./Cell\";\n\n\n\nexport class Cells {\n\n    constructor(_vault, level = 0, unmount = () => { }) {\n        this._vault = _vault;\n        this._cont = new Map();\n        this.level = level;\n        this.unmountSelf = unmount;\n        this.wasDestroyed = false;\n    }\n\n    isDestroyed(throwError=true) {\n        if (!this.wasDestroyed) { return false; }\n        if (!throwError) { return true; }\n        throw new Error(\"Was destroyed before\");\n    }\n\n    unmountSub(path) {\n        const { _cont, level, wasDestroyed } = this;\n        const id = path[level];\n        _cont.delete(id);\n        if (_cont.size || wasDestroyed) { return; }\n        this.unmountSelf(path);\n    }\n\n    mountSub(id) {\n        const { _vault, level, _cont } = this;\n        const depthBelow = _vault.depth - level - 1;\n        const unmount = this.unmountSub.bind(this);\n        const c = depthBelow > 0 ? new Cells(_vault, level + 1, unmount) : new Cell(_vault, unmount);\n        _cont.set(id, c);\n        return c;\n    }\n\n    pick(path=[]) {\n        const { level, _cont } = this;\n        const id = path[level];\n        return _cont.get(id)?.pick(path);\n    }\n\n    async get(path=[], extra={}) {\n        this.isDestroyed();\n\n        const { _vault, level, _cont } = this;\n        const id = path[level];\n        let c = _cont.get(id);\n\n        if (!c) {\n            if (!_vault.remote) { return; }\n            c = this.mountSub(id);\n        }\n\n        return c.get(path, extra);\n    }\n\n    ensure(id) {\n        const { _cont } = this;\n        return _cont.get(id) || this.mountSub(id);\n    }\n\n    async setInit(data, path=[], extra={}) {\n        this.isDestroyed();\n        const id = path[this.level];\n        return this.ensure(id).setInit(data, path, extra);\n    }\n\n    async set(data, path=[], extra={}) {\n        this.isDestroyed();\n        const id = path[this.level];\n        return this.ensure(id).set(data, path, extra);\n    }\n\n    reset(status, path=[], extra={}, batched=undefined) {\n        this.isDestroyed();\n\n        const { _vault, level, _cont } = this;\n        const { handlers } = _vault;\n\n        const onlyOne = path.length > level;\n\n        if (onlyOne) {\n            const id = path[level];\n            const c = _cont.get(id)?.reset(status, path, extra);\n            return c || 0;\n        }\n\n        this.wasDestroyed = (status === \"destroyed\");\n\n        const isBatch = !batched;\n\n        if (isBatch) {\n            batched = [];\n            handlers.run(ice({\n                ...extra,\n                status,\n                path,\n                batch:\"start\"\n            }));\n        }\n\n        let c = 0;\n        for (const [id, cell] of [..._cont.entries()]) {\n            c += cell.reset(status, ice([...path, id]), extra, batched);\n        }\n\n        if (this.wasDestroyed) { _cont.clear(); }\n\n        if (isBatch) {\n            handlers.run(ice({\n                ...extra,\n                status,\n                path,\n                batched:ice(batched),\n                batch:\"end\"\n            }));\n        }\n\n        return c;\n    }\n\n    forEach(exe, path=[], extra={}) {\n        this.isDestroyed();\n\n        const { _cont, level } = this;\n        const onlyOne = path.length > level;\n\n        if (onlyOne) {\n            const id = path[level];\n            _cont.get(id)?.forEach(exe, path, extra);\n        } else {\n            for (const [id, cell] of [..._cont.entries()]) {\n                cell.forEach(exe, ice([...path, id]), extra);\n            }\n        }\n\n    }\n\n}\n", "import { toFn } from \"../tools\";\n\n\nexport class Handlers {\n    constructor(filter=(event, selector)=>true, catcher=(err)=>{}) {\n        this._list = [];\n\n        this.run = event=>{\n            for (const [fn, selector] of [...this._list]) {\n                if (!filter(event, selector)) { continue; }\n                let err, ok = true;\n                try { fn(event); } catch(error) { err = error; ok = false; }\n                if (!ok) { try { catcher(err); } catch {}; }\n            }\n            return event;\n        }\n\n    }\n\n    on(fn, selector) {\n        fn = toFn(fn, \"fn argument\", true);\n        const { _list } = this;\n        const rec = [fn, selector];\n        _list.push(rec);\n        return () => {\n            const x = _list.indexOf(rec);\n            if (x >= 0) { _list.splice(x, 1); }\n        }\n    }\n\n    once(fn, selector) {\n        let rem;\n        return rem = this.on((...a)=>{ rem(); return fn(...a); }, selector);\n    }\n\n}\n", "\r\n//status\r\n//init, push, pull, error, ready, expired, destroyed\r\n\r\nimport { is, toBol, toExtra, toFn, toNum, toObj, toRng } from \"../tools\";\r\nimport { Cell } from \"./Cell\";\r\nimport { Cells } from \"./Cells\";\r\nimport { Handlers } from \"./Handlers\";\r\nimport { formatActions, formatPath, formatRemote, formatUnfold } from \"../formats\";\r\n\r\n\r\n/**\r\n * @preserve\r\n *\r\n * Internal vault state owner.\r\n *\r\n * Keeps the public Vault facade small while this class manages the store,\r\n * remote setup, handlers, and TTL expiry.\r\n */\r\nexport class VaultPrivate {\r\n\r\n    /**\r\n     * @preserve\r\n     *\r\n     * @param {import(\"./Vault\").VaultOptions} opt Vault options.\r\n     */\r\n    constructor(opt) {\r\n        opt = toObj(opt, \"options\") || {};\r\n\r\n        const actions = toObj(opt.actions, \"options.actions\");\r\n        const remote = this.remote = formatRemote(opt.remote, !!actions);\r\n\r\n        const hasMany = toBol(opt.hasMany, \"options.hasMany\", false) || false;\r\n        const depth = this.depth = toNum(opt.depth, \"options.depth\") || (hasMany ? 1 : 0);\r\n        this.readonly = (remote && !remote.push) || toBol(opt.readonly, \"options.readonly\") || false;\r\n        this.ttl = toRng(opt.ttl, 0, 2147483647 * 2, \"options.ttl\") ?? 0;\r\n\r\n        this.act = formatActions(actions, remote?.preserveAction, opt.actionsCatch);\r\n        this.unfold = formatUnfold(opt.unfold, \"options.unfold\");\r\n        this.trait = toFn(opt.trait, \"options.trait\") || (data => data);\r\n        this.purge = toFn(opt.purge, \"options.purge\") || (data => data);\r\n\r\n        this.handlers = new Handlers(\r\n            (ctx, sPath) => {\r\n                if (!sPath.length) { return true; }\r\n                for (const i in sPath) { if (ctx.path[i] != sPath[i]) { return false; } }\r\n                return true;\r\n            },\r\n            toFn(opt.handlersCatch, \"options.handlersCatch\")\r\n        );\r\n\r\n        const store = this.store = depth ? new Cells(this, 0) : new Cell(this);\r\n\r\n        const rDestroy = remote?.destroy;\r\n        const rInitReturn = remote?.init?.((data, path, extra = {}) => {\r\n            path = formatPath(path, this.depth, true);\r\n            return store.setInit(data, path, toExtra(extra));\r\n        });\r\n\r\n        const rInitReturnIsFn = rInitReturn == null ? null : is(\"function\", rInitReturn);\r\n        if (!rDestroy && rInitReturnIsFn === false) {\r\n            throw new Error(\"options.remote.destroy is required when options.remote.init returns a non-function value\");\r\n        }\r\n\r\n        this.handlers.on(ctx=>{\r\n            const { status } = ctx;\r\n            if (status !== \"destroyed\") { return; }\r\n            if (rDestroy) { rDestroy(ctx, rInitReturn); }\r\n            else if (rInitReturnIsFn) { rInitReturn(ctx); }\r\n        }, []);\r\n\r\n    }\r\n\r\n}\r\n", "import { toFn } from \"../tools\";\nimport { VaultPort } from \"./VaultPort\";\nimport { VaultPrivate } from \"./VaultPrivate\";\n\n/**\n * @preserve\n *\n * @typedef {\"init\"|\"push\"|\"pull\"|\"error\"|\"ready\"|\"expired\"|\"destroyed\"} VaultStatus\n */\n\n/**\n * @preserve\n *\n * Event context passed to vault listeners.\n *\n * Operation extra fields are copied directly onto the context.\n *\n * @typedef {Object} VaultContext\n * @property {VaultStatus} status Current cell status.\n * @property {*} [data] Current cached data.\n * @property {Error} [error] Current error.\n * @property {{ status?:VaultStatus, data?:* }} [before] Previous cell snapshot.\n * @property {Array} path Cell path.\n * @property {boolean} isBatch Whether this context describes a batch operation.\n */\n\n/**\n * @preserve\n *\n * @callback VaultListener\n * @param {VaultContext} ctx\n */\n\n/**\n * @preserve\n *\n * @callback RemoteSetter\n * @param {*} data Data received from a passive remote update.\n * @param {Array} [path=[]] Target cell path. Required for addressed vaults.\n * @param {Object} [extra={}] Custom fields added to the emitted context.\n * @returns {Promise<*>}\n */\n\n/**\n * @preserve\n *\n * Packet passed to remote pull and push handlers.\n *\n * Operation extra fields are copied directly onto the packet.\n *\n * @typedef {Object} VaultRemotePacket\n * @property {Array} path Cell path.\n * @property {*} [data] Data being pushed.\n * @property {()=>*|Promise<*>} [pull] Helper available during push to read remote data for the same path.\n */\n\n/**\n * @preserve\n *\n * Packet passed to remote destroy handlers and init cleanup functions.\n *\n * Operation extra fields are copied directly onto the packet.\n *\n * @typedef {Object} VaultDestroyPacket\n * @property {Array} path Destroyed cell path.\n */\n\n/**\n * @preserve\n *\n * Remote adapter used by a vault.\n *\n * @typedef {Object} VaultRemoteOptions\n * @property {number} [timeout=5000] Timeout for pull and push in milliseconds. Use 0 to disable wrapping.\n * @property {(set:RemoteSetter)=>*} [init] Passive-sync setup. Its return value is passed to destroy.\n * @property {(packet:VaultRemotePacket)=>*|Promise<*>} pull Reads from the remote source.\n * @property {(packet:VaultRemotePacket)=>*|Promise<*>} [push] Writes to the remote source. Missing push makes the vault readonly.\n * @property {(packet:VaultDestroyPacket, initReturn:*)=>void} [destroy] Cleans up resources.\n * @property {boolean} [preserveAction] Keeps the action envelope after local actions run. Required when remote and actions are used together.\n */\n\n/**\n * @preserve\n *\n * Main vault configuration.\n *\n * @typedef {Object} VaultOptions\n * @property {boolean} [hasMany=false] Enables one path segment.\n * @property {number} [depth=0] Number of required path segments. Overrides hasMany when greater than 0.\n * @property {boolean} [readonly=false] Blocks set and act calls.\n * @property {VaultRemoteOptions} [remote] Remote pull/push/init/destroy adapter.\n * @property {number} [ttl=0] Time-to-live in milliseconds. Use 0 to disable expiry.\n * @property {Object.<string, Function>} [actions] Local action handlers.\n * @property {(error:Error)=>*} [actionsCatch] Converts local action errors into data.\n * @property {Function|string} [unfold] Extracts cached data from set/push results.\n * @property {(data:*, result:*)=>*} [trait] Transforms data before it is stored.\n * @property {(oldData:*)=>void} [purge] Runs before old cached data is discarded.\n */\n\nexport const _privates = new WeakMap();\n\n/**\n * @preserve\n *\n * Public vault facade.\n *\n * A vault owns cached cells, optional remote synchronization, action dispatch,\n * event subscriptions, lifecycle cleanup, and cache expiry.\n */\nexport class Vault extends VaultPort {\n\n    /**\n     * @preserve\n     *\n     * @param {VaultOptions} [options={}] Vault configuration.\n     */\n    constructor(options={}) {\n        const _vault = new VaultPrivate(options);\n        super(_vault);\n    }\n\n}\n"],
  "mappings": "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",
  "names": ["c"]
}
