all files / lib/deps/ filterChange.js

100% Statements 28/28
100% Branches 16/16
100% Functions 3/3
100% Lines 28/28
1 branch Ignored     
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            317× 317×         12176× 12176× 12176×   12176× 16946×     5356×     16946×   16946×     16942× 148×     16794× 10054× 6740× 6606×   74× 74×       16794×      
'use strict';
 
Object.defineProperty(exports, "__esModule", {
  value: true
});
 
var _errors = require('./errors');
 
function tryFilter(filter, doc, req) {
  try {
    return !filter(doc, req);
  } catch (err) {
    var msg = 'Filter function threw: ' + err.toString();
    return (0, _errors.createError)(_errors.BAD_REQUEST, msg);
  }
}
 
function filterChange(opts) {
  var req = {};
  var hasFilter = opts.filter && typeof opts.filter === 'function';
  req.query = opts.query_params;
 
  return function filter(change) {
    if (!change.doc) {
      // CSG sends events on the changes feed that don't have documents,
      // this hack makes a whole lot of existing code robust.
      change.doc = {};
    }
 
    var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);
 
    if (typeof filterReturn === 'object') {
      return filterReturn;
    }
 
    if (filterReturn) {
      return false;
    }
 
    if (!opts.include_docs) {
      delete change.doc;
    } else if (!opts.attachments) {
      for (var att in change.doc._attachments) {
        /* istanbul ignore else */
        Eif (change.doc._attachments.hasOwnProperty(att)) {
          change.doc._attachments[att].stub = true;
        }
      }
    }
    return true;
  };
}
 
exports.default = filterChange;
module.exports = exports['default'];