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.

8 lines (7 loc) 25.7 kB
{ "version": 3, "sources": ["../../src/index.js", "../../src/tools.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\nexport default (options={})=>new Vault(options);\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 timeout = (ms, msg=\"Timeout\")=>new Promise((_, rej)=>setTimeout(_=>rej(new Error(msg)), ms));\r\n\r\nexport const withTimeout = (fn, ms, msg=\"Timeout\")=>{\r\n if (!fn || !ms) { return fn; }\r\n return (...args)=>Promise.race([ fn(...args), timeout(ms, msg) ]);\r\n}", "\r\nexport class Cell {\r\n\r\n constructor(_vault) {\r\n this.status = \"init\";\r\n this._vault = _vault;\r\n }\r\n\r\n notDestroyed() {\r\n if (this.status !== \"destroyed\") { return true; }\r\n throw new Error(\"Was destroyed before\");\r\n }\r\n\r\n isExpired() { return this.expiresAt && (this.expiresAt < Date.now()); }\r\n\r\n onSet(persistent, before, ...a) {\r\n const { _vault, status, data, error } = this;\r\n const { ttl, handlers } = _vault;\r\n if (persistent) { delete this.expiresAt; }\r\n else if (ttl > 0) { this.expiresAt = Date.now() + ttl; }\r\n\r\n return handlers.run({status, data, error, before}, ...a);\r\n }\r\n\r\n async fetchRemote(status, data, ...a) {\r\n try {\r\n const { push, pull } = this._vault.remote;\r\n const prom = status === \"push\" ? push(data, ...a) : pull(...a);\r\n return this.setReady(status, await prom, ...a);\r\n } catch(err) {\r\n throw this.setError(err);\r\n }\r\n };\r\n\r\n setProm(status, data, ...a) {\r\n const { data:d, status:s } = this;\r\n\r\n this.status = status;\r\n this.prom = this.fetchRemote(status, data, ...a);\r\n delete this.error;\r\n\r\n this.onSet(true, { data:d, status:s }, ...a);\r\n return this.prom;\r\n }\r\n\r\n setError(err, ...a) {\r\n const { data:d, status:s } = this;\r\n\r\n this.status = \"error\"\r\n this.error = err;\r\n delete this.prom;\r\n\r\n this.onSet(false, { data:d, status:s }, ...a);\r\n return err;\r\n }\r\n\r\n async setReady(mode, data, ...a) { //mode = push|pull|remote|local\r\n const { _vault, data:d, status:s } = this;\r\n const { unfold, trait, purge } = _vault;\r\n\r\n let res = data;\r\n \r\n if (unfold && (mode === \"local\" || mode === \"push\")) { [data, res] = await unfold(data); }\r\n\r\n if (this.data != null) { purge(this.data); }\r\n this.data = await trait(data, res);\r\n\r\n this.status = \"ready\";\r\n delete this.error;\r\n delete this.prom;\r\n\r\n this.onSet(false, { data:d, status:s }, ...a);\r\n return res;\r\n }\r\n\r\n pick() { return this.isExpired() ? this.reset(\"expired\") : this; }\r\n\r\n async get(...a) {\r\n this.notDestroyed();\r\n \r\n const { _vault, status, data, prom } = this.pick();\r\n const { remote } = _vault;\r\n if (status === \"ready\") { return data; }\r\n if (!remote) { return; }\r\n if (status === \"pull\") { return prom; } //same same\r\n if (status === \"push\") { await prom; return this.data; }\r\n\r\n return this.setProm(\"pull\", undefined, ...a);\r\n }\r\n\r\n async set(data, ...a) {\r\n this.notDestroyed();\r\n\r\n const { _vault, prom } = this;\r\n const { remote, act } = _vault;\r\n\r\n if (!remote) { return this.setReady(\"local\", await act(data, ...a), ...a); }\r\n\r\n const push = async _=>this.setProm(\"push\", await act(data, ...a), ...a);\r\n return !prom ? push() : (this.prom = this.prom.then(push));\r\n }\r\n\r\n reset(status, ...a) {\r\n this.notDestroyed();\r\n\r\n const { _vault, data:d, status:s } = this;\r\n const { purge } = _vault;\r\n\r\n try {\r\n if (this.data != null) { purge(this.data); }\r\n } catch(err) {\r\n throw this.setError(err);\r\n }\r\n\r\n this.status = status;\r\n delete this.data;\r\n delete this.prom;\r\n delete this.error;\r\n delete this.expiresAt;\r\n\r\n this.onSet(true, { status:s, data:d }, ...a);\r\n\r\n return this;\r\n }\r\n}\r\n", "import { Cell } from \"./Cell\";\r\n\r\n\r\n\r\nexport class Cells extends Map {\r\n\r\n constructor(_vault) {\r\n super();\r\n this._vault = _vault;\r\n }\r\n\r\n pick(id) {\r\n const c = super.get(id);\r\n return c?.isExpired() ? this.reset(\"expired\", id) : c;\r\n }\r\n\r\n async get(id, ...a) {\r\n const { _vault } = this;\r\n let c = this.pick(id);\r\n if (!c) {\r\n if (!_vault.remote) { return; }\r\n super.set(id, c = new Cell(_vault));\r\n }\r\n return c.get(id, ...a);\r\n }\r\n\r\n ensure(id) {\r\n let c = super.get(id);\r\n if (!c) { super.set(id, c = new Cell(this._vault)); }\r\n return c;\r\n }\r\n\r\n async setReady(mode, data, id, ...a) {\r\n return this.ensure(id).setReady(mode, data, id, ...a);\r\n }\r\n\r\n async set(data, id, ...a) {\r\n return this.ensure(id).set(data, id, ...a);\r\n }\r\n\r\n reset(status, id, ...a) {\r\n const c = super.get(id);\r\n super.delete(id);\r\n return c?.reset(status, id, ...a);\r\n }\r\n}", "import { toFn } from \"../tools\";\r\n\r\n\r\nexport class Handlers {\r\n constructor(emitter) {\r\n this.list = [];\r\n\r\n const run = (...args)=>{\r\n for (const fn of [...this.list]) { fn(...args); }\r\n }\r\n\r\n this.run = !emitter ? run : (...a)=>emitter(run, ...a);\r\n }\r\n\r\n on(fn) {\r\n fn = toFn(fn, \"fn argument\", true);\r\n const { list } = this;\r\n list.push(fn);\r\n return () => {\r\n const x = list.indexOf(fn);\r\n if (x >= 0) { list.splice(x, 1); }\r\n }\r\n }\r\n\r\n once(fn) {\r\n let rem;\r\n return rem = this.on((...a)=>{ rem(); return fn(...a); });\r\n }\r\n\r\n}", "\r\n//status\r\n//init, push, pull, error, ready, expired, destroyed\r\n\r\nimport { toBol, toFn, toObj, toRng, toStr, withTimeout } from \"../tools\";\r\nimport { Cell } from \"./Cell\";\r\nimport { Cells } from \"./Cells\";\r\nimport { Handlers } from \"./Handlers\";\r\n\r\nconst formatRemote = (remote, reqPreserveActions=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 remote.init = toFn(remote.init, m + \".init\");\r\n remote.push = withTimeout(toFn(remote.push, m + \".push\"), timeout);\r\n remote.pull = withTimeout(toFn(remote.pull, m + \".pull\", true), timeout);\r\n remote.preserveAction = toBol(remote.preserveAction, m + \".preserveAction\", reqPreserveActions);\r\n remote.destroy = toFn(remote.destroy, m + \".destroy\");\r\n\r\n return remote;\r\n}\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\nconst formatActions = (actions, preserveAction) => {\r\n if (!actions) { return req=>req; }\r\n\r\n return async (req, ...a) => {\r\n const { action, params } = 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 const data = await act(params, ...a);\r\n return preserveAction ? { action, params:data } : data;\r\n }\r\n}\r\n\r\nexport class VaultPrivate {\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 = this.hasMany = toBol(opt.hasMany, \"options.hasMany\") || false;\r\n this.readonly = (remote && !remote.push) || toBol(opt.readonly, \"options.readonly\") || false;\r\n const ttl = this.ttl = toRng(opt.ttl, 0, 2147483647 * 2, \"options.ttl\") ?? 0;\r\n\r\n this.act = formatActions(actions, remote?.preserveAction);\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(toFn(opt.emitter, \"options.emitter\"));\r\n\r\n const store = this.store = hasMany ? new Cells(this) : new Cell(this);\r\n\r\n if (remote?.init) { this.initDestroy = remote.init((...a) => store.setReady(\"remote\", ...a)); }\r\n\r\n if (remote?.destroy) { this.destroy = _=>remote.destroy(this.initDestroy); }\r\n else { this.destroy = toFn(this.initDestroy, \"remote.init return value\") || (()=>{}); }\r\n\r\n if (!ttl) { return; }\r\n\r\n const cleanUp = !hasMany ? _ => store.pick() : _ => { for (const id of store.keys()) { store.pick(id); } }\r\n setInterval(cleanUp, ttl / 2);\r\n\r\n }\r\n\r\n reset(status, ...a) {\r\n const { store } = this;\r\n store.reset(status, ...a);\r\n }\r\n\r\n resetAll(status, ...a) {\r\n if (!this.hasMany) { this.reset(status, ...a); }\r\n else { this.forEach((ctx, id)=>this.reset(status, id, ...a)); }\r\n }\r\n\r\n}", "import { toFn } from \"../tools\";\r\nimport { VaultPrivate } from \"./VaultPrivate\";\r\n\r\nexport const _privates = new WeakMap();\r\n\r\nexport class Vault {\r\n\r\n constructor(options={}) {\r\n const _p = new VaultPrivate(options);\r\n\r\n const enumerable = true;\r\n Object.defineProperty(this, \"hasMany\", {enumerable, value:_p.hasMany});\r\n Object.defineProperty(this, \"hasRemote\", {enumerable, value:!!_p.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, _p);\r\n }\r\n\r\n getStatus(...a) { return _privates.get(this).store.pick(...a)?.status || \"init\"; }\r\n getData(...a) { return _privates.get(this).store.pick(...a)?.data; }\r\n getError(...a) { return _privates.get(this).store.pick(...a)?.error; }\r\n\r\n isStatus(statuses, ...a) {\r\n const s = this.getStatus(...a);\r\n return Array.isArray(statuses) ? statuses.includes(s) : (s === statuses);\r\n }\r\n\r\n\r\n async get(...a) { return _privates.get(this).store.get(...a); }\r\n async set(data, ...a) {\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, ...a);\r\n }\r\n\r\n async act(action, params, ...a) {\r\n const { readonly, store } = _privates.get(this);\r\n if (readonly) { throw new Error(`Do is not allowed`); }\r\n return store.set({action, params}, ...a);\r\n }\r\n\r\n reset(...a) {\r\n _privates.get(this).reset(\"init\", ...a);\r\n return this;\r\n }\r\n\r\n resetAll(...a) {\r\n _privates.get(this).resetAll(\"init\", ...a);\r\n return this;\r\n }\r\n\r\n destroy(...a) {\r\n const _vault = _privates.get(this);\r\n _vault.resetAll(\"destroyed\", ...a);\r\n _vault.destroy();\r\n return this;\r\n }\r\n\r\n on(fn) { return _privates.get(this).handlers.on(fn); }\r\n once(fn) { return _privates.get(this).handlers.once(fn); }\r\n\r\n async has(...a) {\r\n const data = await this.get(...a);\r\n return data !== undefined;\r\n }\r\n\r\n forEach(exe) {\r\n const { store, hasMany } = _privates.get(this);\r\n\r\n if (!hasMany) {\r\n const { status, data } = store.pick();\r\n return exe({ status, data });\r\n }\r\n\r\n let proms;\r\n\r\n for (const id of [...store.keys()]) {\r\n const { status, data } = store.pick(id);\r\n if (status === \"init\") { continue; }\r\n const res = exe({status, data}, id);\r\n if (res instanceof Promise) { (proms ??= []).push(res); }\r\n }\r\n\r\n if (proms) { return Promise.all(proms); }\r\n }\r\n\r\n collect(collector, exe) {\r\n const res = this.forEach((ctx, id)=>exe(collector, ctx, id));\r\n return res instanceof Promise ? res.then(_=>collector) : collector;\r\n }\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, prop, receiver) {\r\n const val = Reflect.get(t, prop, receiver);\r\n if (val !== undefined) { return val; }\r\n return (params, ...a) =>d(prop, params, ...a);\r\n }\r\n });\r\n }\r\n\r\n}\r\n"], "mappings": "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", "names": ["_", "timeout"] }