@@ -22,7 +22,6 @@ const VersionError = require('./error/version');
2222const ParallelSaveError = require ( './error/parallelSave' ) ;
2323const applyDefaultsHelper = require ( './helpers/document/applyDefaults' ) ;
2424const applyDefaultsToPOJO = require ( './helpers/model/applyDefaultsToPOJO' ) ;
25- const applyQueryMiddleware = require ( './helpers/query/applyQueryMiddleware' ) ;
2625const applyHooks = require ( './helpers/model/applyHooks' ) ;
2726const applyMethods = require ( './helpers/model/applyMethods' ) ;
2827const applyProjection = require ( './helpers/projection/applyProjection' ) ;
@@ -4765,7 +4764,7 @@ Model.compile = function compile(name, schema, collectionName, connection, base)
47654764 Object . setPrototypeOf ( model . Query . prototype , Query . prototype ) ;
47664765 model . Query . base = Query . base ;
47674766 model . Query . prototype . constructor = Query ;
4768- applyQueryMiddleware ( model . Query , model ) ;
4767+ model . _applyQueryMiddleware ( ) ;
47694768 applyQueryMethods ( model , schema . query ) ;
47704769
47714770 return model ;
@@ -4874,6 +4873,41 @@ if (util.inspect.custom) {
48744873 Model [ util . inspect . custom ] = Model . inspect ;
48754874}
48764875
4876+ /*!
4877+ * Applies query middleware from this model's schema to this model's
4878+ * Query constructor.
4879+ */
4880+
4881+ Model . _applyQueryMiddleware = function _applyQueryMiddleware ( ) {
4882+ const Query = this . Query ;
4883+ const queryMiddleware = this . schema . s . hooks . filter ( hook => {
4884+ const contexts = _getContexts ( hook ) ;
4885+ if ( hook . name === 'validate' ) {
4886+ return ! ! contexts . query ;
4887+ }
4888+ if ( hook . name === 'deleteOne' || hook . name === 'updateOne' ) {
4889+ return ! ! contexts . query || Object . keys ( contexts ) . length === 0 ;
4890+ }
4891+ if ( hook . query != null || hook . document != null ) {
4892+ return ! ! hook . query ;
4893+ }
4894+ return true ;
4895+ } ) ;
4896+
4897+ Query . prototype . _queryMiddleware = queryMiddleware ;
4898+ } ;
4899+
4900+ function _getContexts ( hook ) {
4901+ const ret = { } ;
4902+ if ( hook . hasOwnProperty ( 'query' ) ) {
4903+ ret . query = hook . query ;
4904+ }
4905+ if ( hook . hasOwnProperty ( 'document' ) ) {
4906+ ret . document = hook . document ;
4907+ }
4908+ return ret ;
4909+ }
4910+
48774911/*!
48784912 * Module exports.
48794913 */
0 commit comments