MCPcopy
hub / github.com/apache/pouchdb / filter

Function filter

lib/index-browser.js:4123–4179  ·  view source on GitHub ↗
(changesHandler, opts)

Source from the content-addressed store, hash-verified

4121}
4122
4123function filter(changesHandler, opts) {
4124 var callback = opts.complete;
4125 if (opts.filter === '_view') {
4126 if (!opts.view || typeof opts.view !== 'string') {
4127 var err = createError(BAD_REQUEST,
4128 '`view` filter parameter not found or invalid.');
4129 return callback(err);
4130 }
4131 // fetch a view from a design doc, make it behave like a filter
4132 var viewName = parseDesignDocFunctionName(opts.view);
4133 changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {
4134 /* istanbul ignore if */
4135 if (changesHandler.isCancelled) {
4136 return callback(null, {status: 'cancelled'});
4137 }
4138 /* istanbul ignore next */
4139 if (err) {
4140 return callback(generateErrorFromResponse(err));
4141 }
4142 var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&
4143 ddoc.views[viewName[1]].map;
4144 if (!mapFun) {
4145 return callback(createError(MISSING_DOC,
4146 (ddoc.views ? 'missing json key: ' + viewName[1] :
4147 'missing json key: views')));
4148 }
4149 opts.filter = evalView(mapFun);
4150 changesHandler.doChanges(opts);
4151 });
4152 } else if (opts.selector) {
4153 opts.filter = function (doc) {
4154 return matchesSelector(doc, opts.selector);
4155 };
4156 changesHandler.doChanges(opts);
4157 } else {
4158 // fetch a filter from a design doc
4159 var filterName = parseDesignDocFunctionName(opts.filter);
4160 changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {
4161 /* istanbul ignore if */
4162 if (changesHandler.isCancelled) {
4163 return callback(null, {status: 'cancelled'});
4164 }
4165 /* istanbul ignore next */
4166 if (err) {
4167 return callback(generateErrorFromResponse(err));
4168 }
4169 var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];
4170 if (!filterFun) {
4171 return callback(createError(MISSING_DOC,
4172 ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]
4173 : 'missing json key: filters')));
4174 }
4175 opts.filter = evalFilter(filterFun);
4176 changesHandler.doChanges(opts);
4177 });
4178 }
4179}
4180

Callers 2

tryFilterFunction · 0.70

Calls 8

createErrorFunction · 0.70
evalViewFunction · 0.70
matchesSelectorFunction · 0.70
evalFilterFunction · 0.70
getMethod · 0.45
doChangesMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…