all files / lib/replicate/ generateReplicationId.js

100% Statements 28/28
93.75% Branches 15/16
100% Functions 6/6
100% Lines 27/27
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55                      23× 25× 25×           1149× 1149× 1149× 1149×   1149× 23×     1149×     1149× 1120× 1120×         1120× 1120×      
'use strict';
 
Object.defineProperty(exports, "__esModule", {
  value: true
});
 
var _promise = require('./../deps/promise');
 
var _promise2 = _interopRequireDefault(_promise);
 
var _md = require('../deps/md5');
 
var _md2 = _interopRequireDefault(_md);
 
var _pouchdbCollate = require('pouchdb-collate');
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
function sortObjectPropertiesByKey(queryParams) {
  return Object.keys(queryParams).sort(_pouchdbCollate.collate).reduce(function (result, key) {
    result[key] = queryParams[key];
    return result;
  }, {});
}
 
// Generate a unique id particular to this replication.
// Not guaranteed to align perfectly with CouchDB's rep ids.
function generateReplicationId(src, target, opts) {
  var docIds = opts.doc_ids ? opts.doc_ids.sort(_pouchdbCollate.collate) : '';
  var filterFun = opts.filter ? opts.filter.toString() : '';
  var queryParams = '';
  var filterViewName = '';
 
  if (opts.filter && opts.query_params) {
    queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));
  }
 
  if (opts.filter && opts.filter === '_view') {
    filterViewName = opts.view.toString();
  }
 
  return _promise2.default.all([src.id(), target.id()]).then(function (res) {
    var queryData = res[0] + res[1] + filterFun + filterViewName + queryParams + docIds;
    return (0, _md2.default)(queryData);
  }).then(function (md5sum) {
    // can't use straight-up md5 alphabet, because
    // the char '/' is interpreted as being for attachments,
    // and + is also not url-safe
    md5sum = md5sum.replace(/\//g, '.').replace(/\+/g, '_');
    return '_local/' + md5sum;
  });
}
 
exports.default = generateReplicationId;
module.exports = exports['default'];