mirror of
				https://github.com/flynx/pWiki.git
				synced 2025-11-03 20:40:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
/**********************************************************************
 | 
						|
* 
 | 
						|
*
 | 
						|
*
 | 
						|
**********************************************************************/
 | 
						|
((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 })
 |