mirror of
				https://github.com/flynx/pWiki.git
				synced 2025-10-31 19:10:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.4 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...
 | |
| 	__xpaths__: 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 cache???
 | |
| 	__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 })
 |