{
  "version": 3,
  "sources": ["../../src/index.js", "../../src/static.js", "../../src/TreeLock.js"],
  "sourcesContent": ["import { TreeLock } from \"./TreeLock\";\r\n\r\n\r\nexport { TreeLock };\r\n\r\nexport default (options={})=>new TreeLock(options);\r\n", "\r\nimport { timeout } from \"@randajan/sleep\";\r\n\r\n\r\nexport const _privates = new WeakMap();\r\n\r\nexport const bfn = ()=>{};\r\nexport class Timeout extends Error {}\r\n\r\nexport const toInt = (num, min, max, errorName)=>{\r\n    if (num == null) { return; }\r\n    const tp = typeof num;\r\n    if (tp !== \"number\") { throw new Error(`Expects '${errorName}' to be a 'number' but received '${tp}'`); }\r\n    if (min != null && num < min) { throw new Error(`Expects '${errorName}' to be greater than '${min}' but received '${num}'`); }\r\n    if (max != null && num > max) { throw new Error(`Expects '${errorName}' to be lesser than '${max}' but received '${num}'`); }\r\n    return Math.round(num);\r\n}\r\n\r\nexport const toTimeoutMs = (num)=>toInt(num, 0, 2147483647, \"timeout\");\r\n\r\nexport const withTimeout = (prom, tms)=>{\r\n    if (!tms) { return prom; }\r\n    return Promise.race([prom, timeout(tms, new Timeout(`Execution time exceeded ${tms/1000}s`))]);\r\n}\r\n\r\n\r\nexport const toFn = (any, errorName)=>{\r\n    if (any == null) { return; }\r\n    const tp = typeof any;\r\n    if (tp !== \"function\") { throw new Error(`Expects '${errorName}' to be a 'number' but received '${tp}'`); }\r\n    return any;\r\n}", "import { _privates, bfn, Timeout, toFn, toTimeoutMs, withTimeout } from \"./static\";\n\nexport class TreeLock {\n    constructor(options={}) {\n        const { name, ttl, on, sup } = options;\n        const _pp = _privates.get(sup);\n\n        const _p = {\n            sup,\n            queue: Promise.resolve(),\n            ram:0,\n            enqueue: !_pp ? _=>_p.queue : _=>Promise.all([_p.queue, _pp.queue]),\n            ttl:toTimeoutMs(ttl) ?? _pp?.ttl,\n            on:toFn(on) || _pp?.on || bfn,\n        }\n\n        _p.append = (sub)=>{\n            if (_p.subs) { _p.subs.push(sub); }\n            else {\n                _p.subs = [sub];\n                const enq = _p.enqueue;\n                _p.enqueue = _=>Promise.all([enq(), ..._p.subs.map(b=>b.queue)]);\n            }\n        }\n\n        const finish = ()=>_p.ram = Math.max(0, _p.ram-1);\n        const done = (r) =>{ finish(); _p.on(this, \"done\"); return r; };\n        const crash = (err)=>{\n            finish();\n            const status = (err instanceof Timeout) ? \"timeout\" : \"error\";\n            _p.on(this, status, err);\n        }\n\n        _p.run = (fn, tms, args)=>{     \n            _p.ram++;\n            if (this.ram + this.ramSup > 1) { _p.on(this, \"enter\"); }\n\n            const exec = () => {\n                _p.on(this, \"start\");\n                return withTimeout(fn(...args), tms).then(done);\n            };\n        \n            const next = _p.enqueue().then(exec);\n            _p.queue = next.catch(crash);\n            return next;\n        }\n\n        const enumerable = true;\n        Object.defineProperties(this, {\n            name:{ value:name },\n            sup:{ value:sup },\n            subs: { get:_=>[..._p.subs] },\n            ram:{ enumerable, get:_=>_p.ram },\n            ramSup:{ enumerable, get:!_pp ? _=>0 : _=>sup.ram + sup.ramSup },\n            ramSub:{ enumerable, get:_=>_p.subs.reduce((r, s)=>r+s.ram+s.ramSub, 0) },\n            queue:{ get:_=>_p.queue}\n        });\n\n        _privates.set(this, _p);\n        if (_pp) { _pp.append(this); }\n    }\n\n    run(fn, ttl, ...args) {\n        const _p = _privates.get(this);\n        ttl = toTimeoutMs(ttl) ?? _p.ttl;\n        return _p.run(fn, ttl, args);\n    }\n\n    wrap(fn, ttl) {\n        const _p = _privates.get(this);\n        ttl = toTimeoutMs(ttl) ?? _p.ttl;\n        return (...args) => _p.run(fn, ttl, args);\n    }\n\n    sub(options={}) {\n        return new TreeLock({\n            ...options,\n            sup:this\n        });\n    }\n\n}\n\n"],
  "mappings": "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",
  "names": []
}
