pWiki/pwiki/store/pouchdb.js

82 lines
2.1 KiB
JavaScript
Raw Normal View History

/**********************************************************************
*
*
*
**********************************************************************/
((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
(function(require){ var module={} // make module AMD/node compatible...
/*********************************************************************/
var object = require('ig-object')
var types = require('ig-types')
var pwpath = require('../path')
var base = require('./base')
var PouchDB = require('pouchdb')
//---------------------------------------------------------------------
var PouchDBStore =
module.PouchDBStore = {
__proto__: base.Store,
// XXX should this be __path__???
// ...this sets the path where the store is created...
__path__: 'data/pouch',
__key_prefix__: 'pwiki:',
__data: undefined,
get data(){
return this.__data
?? (this.__data = new PouchDB(this.__path__)) },
set data(value){
this.__data = value },
// XXX INDEX...
__paths__: async function(){
var that = this
// XXX not sure if this is a good idea...
return (await this.data.allDocs()).rows
.map(function(e){
return e.id.slice(that.__key_prefix__.length) }) },
// XXX use an index...
__exists__: async function(key){
return !!(await this.__get__(key))
&& key },
__get__: async function(key){
try{
return await this.data.get(this.__key_prefix__ + key)
}catch(err){
return undefined } },
__update__: async function(key, data, mode='update'){
var {_id, _rev, ...rest} = await this.__get__(key) ?? {}
await this.data.put({
// original data...
...( (mode == 'update') ?
rest
: {}),
// new data...
...data,
// system...
_id: _id
?? (this.__key_prefix__ + key),
...(_rev ?
{_rev}
: {}),
})
return this },
__delete__: async function(key){
var doc = await this.__get__(key)
doc
&& (await this.data.remove(doc))
return this },
}
/**********************************************************************
* vim:set ts=4 sw=4 : */ return module })