index.js
function upsertInner(db, docId, diffFun) {
  if (typeof docId !== 'string') {
    return PouchPromise.reject(new Error('doc id is required'));
  }

  return db.get(docId).catch(function (err) {
    /* istanbul ignore next */
    if (err.status !== 404) {
      throw err;
    }
    return {};
  }).then(function (doc) {
    // the user might change the _rev, so save it for posterity
    var docRev = doc._rev;
    var newDoc = diffFun(doc);

    if (!newDoc) {
      // if the diffFun returns falsy, we short-circuit as
      // an optimization
      return { updated: false, rev: docRev, id: docId };
    }

    // users aren't allowed to modify these values,
    // so reset them here
    newDoc._id = docId;
    newDoc._rev = docRev;
    return tryAndPut(db, newDoc, diffFun);
  });
}
function upsertInner(db, docId, diffFun) {
  if (typeof docId !== 'string') {
    return PouchPromise.reject(new Error('doc id is required'));
  }

  return db.get(docId).catch(function (err) {
    /* istanbul ignore next */
    if (err.status !== 404) {
      throw err;
    }
    return {};
  }).then(function (doc) {
    // the user might change the _rev, so save it for posterity
    var docRev = doc._rev;
    var newDoc = diffFun(doc);

    if (!newDoc) {
      // if the diffFun returns falsy, we short-circuit as
      // an optimization
      return { updated: false, rev: docRev, id: docId };
    }

    // users aren't allowed to modify these values,
    // so reset them here
    newDoc._id = docId;
    newDoc._rev = docRev;
    return tryAndPut(db, newDoc, diffFun);
  });
}
function upsertInner ( db , docId , diffFun ) { if ( typeof docId !== 'string' ) { return PouchPromise . reject ( new Error ( 'doc id is required' ) ) ; } return db . get ( docId ) . catch ( function ( err ) { /* istanbul ignore next */ if ( err . status !== 404 ) { throw err ; } return { } ; } ) . then ( function ( doc ) { // the user might change the _rev, so save it for posterity var docRev = doc . _rev ; var newDoc = diffFun ( doc ) ; if ( ! newDoc ) { // if the diffFun returns falsy, we short-circuit as // an optimization return { updated : false , rev : docRev , id : docId } ; } // users aren't allowed to modify these values, // so reset them here newDoc . _id = docId ; newDoc . _rev = docRev ; return tryAndPut ( db , newDoc , diffFun ) ; } ) ; }
this is essentially the "update sugar" function from daleharvey/pouchdb#1388 the diffFun tells us what delta to apply to the doc.  it either returns the doc, or false if it doesn't need to do an update after all
this is essentially the update sugar function from daleharvey / pouchdb#1388 the diffFun tells us what delta to apply to the doc . it either returns the doc or false if it doesn t need to do an update after all