UNPKG

pouch-resolve-conflicts

Version:
89 lines (70 loc) 2.19 kB
# PouchDB Resolve Conflicts PouchDB plugin to assist in PouchDB conflict resolving. [![Build Status](https://travis-ci.org/jo/pouch-resolve-conflicts.svg?branch=master)](https://travis-ci.org/jo/pouch-resolve-conflicts) ## Disclaimer Conflict resolution should better be done server side to avoid hard to debug loops when multiple clients resolves conflicts on the same documents. ## Installation pouch-resolve-conflicts is [hosted on npm](https://www.npmjs.com/package/pouch-resolve-conflicts). ### Node Install via `npm install pouch-resolve-conflicts` ```js var PouchDB = require('pouchdb') PouchDB.plugin(require('pouch-resolve-conflicts')) ``` ### Browser Use the [browserified build](./dist/pouch-resolve-conflicts.js). ```html <script src="pouchdb.js"></script> <script src="pouch-resolve-conflicts.js"></script> ``` ## Usage ```js // The resolve function. This function takes two documents and returns either // one of them, a changed version of one of them, or nothing. In the latter the // conflict will not be resolved. If there are more than two conflicting // versions this function will be called with each version against the former // result. function resolveFun (a, b) { // cannot merge: return nothing if ('foo' in a && 'foo' in b) return // return one of the docs if ('foo' in a) return a if ('foo' in b) return b // return changed doc a.foo = 'bar' return a } var db = new PouchDB('mydb') db // Lets have a conflict .bulkDocs({ docs: [ { _id: 'mydoc', _rev: '1-one', foo: 'bar' }, { _id: 'mydoc', _rev: '1-two', bar: 'baz' } ], new_edits: false }) // Query doc with `conflicts: true` .then(function(response) { return db.get('mydoc', { conflicts: true }) }) // And resolve it .then(function(doc) { return db.resolveConflicts(doc, resolveFun) }) // `resolveFun` can also return a promise: function resolveFun (a, b) { return new Promise(function(resolve, reject) { if ('foo' in a && 'foo' in b) return resolve(undefined) if ('foo' in a) return resolve(a) if ('foo' in b) return resolve(b) a.foo = 'bar' return resolve(a) }) } ``` ## Tests ```sh npm test ```