pouchdb-updateif
Version:
Add update sugar methods over get/put
2 lines (1 loc) • 1.66 kB
JavaScript
var _deepEqual=void 0;try{_deepEqual=require('deep-equal')}catch(err){(function(){var assert=require('assert');_deepEqual=function _deepEqual(a,b){try{return assert.deepEqual(a,b),true}catch(err){return false}}})()}function replaceFn(obj,current){return obj}Object.assign(exports,{update:function update(obj){var _this=this;var applyFn=arguments.length>1&&arguments[1]!==undefined?arguments[1]:replaceFn;if('string'===typeof obj)obj={_id:obj};return this.get(obj._id).then(function(current){var _ref=current?current:{};var _id=_ref._id;var _rev=_ref._rev;if(!obj._rev)obj._rev=_rev;var ans=applyFn?applyFn(obj,current,_rev):obj;if(!ans)return ans;if(!ans._id)ans._id=_id;if(!ans._rev&&_id===ans._id)ans._rev=_rev;return ans},function(err){if(err.status!==404)throw err;var ans=applyFn?applyFn(obj,null,null):obj;return ans}).then(function(ans){return ans?_this.put(ans):null})},updateIf:function updateIf(obj,filterFn){return this.update(obj,function(obj,current){return filterFn(obj,current)?obj:null})},updateOrMerge:function updateOrMerge(obj){return this.update(obj,function(obj,current){return current?Object.assign(current,obj):obj})},_checkNewVersion:function _checkNewVersion(obj,current){return!current||obj.version>current.version},updateByVersion:function updateByVersion(obj,checkNewVersion){if(!checkNewVersion)checkNewVersion=this._checkNewVersion;return this.updateIf(obj,checkNewVersion)},_checkChanged:function _checkChanged(obj,current){return!current||!_deepEqual(obj,current)},updateIfChanged:function updateIfChanged(obj,checkChanged){if(!checkChanged)checkChanged=this._checkChanged;return this.updateIf(obj,checkChanged)}});
;