import { cloneDeep } from 'lodash'; declare global { var db: any; } export const put = async ( _id: string, type: string, update: (doc: any) => any, defaultDoc: any ) => { var current; try { current = await db.get(_id); } catch { current = { _rev: undefined, doc: cloneDeep(defaultDoc) }; } try { db.put({ _id, _rev: current._rev, type, doc: update(current.doc) }); } catch (error: any) { if (error.name === 'conflict') { await put(_id, type, update, defaultDoc); } else { console.error( `put(${_id}, ${JSON.stringify( update(current.doc) )}), error: ${JSON.stringify(error)}` ); } } }; export const getFamily = async (key: string, options: any = {}) => { return await db.allDocs({ startkey: key, endkey: key + '\ufff0', ...options, }); }; export const get = async (id: string) => { await db.get(id); }; export const putAll = async (docs: any[]) => { return await db.bulkDocs(docs); }; export const getDocsByType = async (type: string) => { return (await db.find({ selector: { type: type } })).docs; };