You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.0 KiB
JavaScript
55 lines
1.0 KiB
JavaScript
12 months ago
|
'use strict';
|
||
|
|
||
|
/*!
|
||
|
* ignore
|
||
|
*/
|
||
|
|
||
|
module.exports = applyQueryMiddleware;
|
||
|
|
||
|
const validOps = require('./validOps');
|
||
|
|
||
|
/*!
|
||
|
* ignore
|
||
|
*/
|
||
|
|
||
|
applyQueryMiddleware.middlewareFunctions = validOps.concat([
|
||
|
'validate'
|
||
|
]);
|
||
|
|
||
|
/**
|
||
|
* Apply query middleware
|
||
|
*
|
||
|
* @param {Query} Query constructor
|
||
|
* @param {Model} model
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
function applyQueryMiddleware(Query, model) {
|
||
|
const queryMiddleware = model.schema.s.hooks.filter(hook => {
|
||
|
const contexts = _getContexts(hook);
|
||
|
if (hook.name === 'validate') {
|
||
|
return !!contexts.query;
|
||
|
}
|
||
|
if (hook.name === 'deleteOne' || hook.name === 'updateOne') {
|
||
|
return !!contexts.query || Object.keys(contexts).length === 0;
|
||
|
}
|
||
|
if (hook.query != null || hook.document != null) {
|
||
|
return !!hook.query;
|
||
|
}
|
||
|
return true;
|
||
|
});
|
||
|
|
||
|
Query.prototype._queryMiddleware = queryMiddleware;
|
||
|
}
|
||
|
|
||
|
function _getContexts(hook) {
|
||
|
const ret = {};
|
||
|
if (hook.hasOwnProperty('query')) {
|
||
|
ret.query = hook.query;
|
||
|
}
|
||
|
if (hook.hasOwnProperty('document')) {
|
||
|
ret.document = hook.document;
|
||
|
}
|
||
|
return ret;
|
||
|
}
|