'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']; |