Skip to content

Commit 57541cb

Browse files
committed
refactor: make query helpers more consistently fit our loose definition of helpers
1 parent 880bb2c commit 57541cb

File tree

11 files changed

+133
-141
lines changed

11 files changed

+133
-141
lines changed

lib/aggregate.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,8 +1019,8 @@ Aggregate.prototype.exec = async function exec() {
10191019
const model = this._model;
10201020
const collection = this._model.collection;
10211021

1022-
applyGlobalMaxTimeMS(this.options, model);
1023-
applyGlobalDiskUse(this.options, model);
1022+
applyGlobalMaxTimeMS(this.options, model.db.options, model.base.options);
1023+
applyGlobalDiskUse(this.options, model.db.options, model.base.options);
10241024

10251025
if (this.options && this.options.cursor) {
10261026
return new AggregationCursor(this);

lib/constants.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
'use strict';
2+
3+
/*!
4+
* ignore
5+
*/
6+
7+
const queryOperations = Object.freeze([
8+
// Read
9+
'countDocuments',
10+
'distinct',
11+
'estimatedDocumentCount',
12+
'find',
13+
'findOne',
14+
// Update
15+
'findOneAndReplace',
16+
'findOneAndUpdate',
17+
'replaceOne',
18+
'updateMany',
19+
'updateOne',
20+
// Delete
21+
'deleteMany',
22+
'deleteOne',
23+
'findOneAndDelete'
24+
]);
25+
26+
exports.queryOperations = queryOperations;
27+
28+
/*!
29+
* ignore
30+
*/
31+
32+
const queryMiddlewareFunctions = queryOperations.concat([
33+
'validate'
34+
]);
35+
36+
exports.queryMiddlewareFunctions = queryMiddlewareFunctions;

lib/helpers/model/applyStaticHooks.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const middlewareFunctions = require('../query/applyQueryMiddleware').middlewareFunctions;
3+
const middlewareFunctions = require('../../constants').queryMiddlewareFunctions;
44
const promiseOrCallback = require('../promiseOrCallback');
55

66
module.exports = function applyStaticHooks(model, hooks, statics) {

lib/helpers/query/applyGlobalOption.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
const utils = require('../../utils');
44

5-
function applyGlobalMaxTimeMS(options, model) {
6-
applyGlobalOption(options, model, 'maxTimeMS');
5+
function applyGlobalMaxTimeMS(options, connectionOptions, baseOptions) {
6+
applyGlobalOption(options, connectionOptions, baseOptions, 'maxTimeMS');
77
}
88

9-
function applyGlobalDiskUse(options, model) {
10-
applyGlobalOption(options, model, 'allowDiskUse');
9+
function applyGlobalDiskUse(options, connectionOptions, baseOptions) {
10+
applyGlobalOption(options, connectionOptions, baseOptions, 'allowDiskUse');
1111
}
1212

1313
module.exports = {
@@ -16,14 +16,14 @@ module.exports = {
1616
};
1717

1818

19-
function applyGlobalOption(options, model, optionName) {
19+
function applyGlobalOption(options, connectionOptions, baseOptions, optionName) {
2020
if (utils.hasUserDefinedProperty(options, optionName)) {
2121
return;
2222
}
2323

24-
if (utils.hasUserDefinedProperty(model.db.options, optionName)) {
25-
options[optionName] = model.db.options[optionName];
26-
} else if (utils.hasUserDefinedProperty(model.base.options, optionName)) {
27-
options[optionName] = model.base.options[optionName];
24+
if (utils.hasUserDefinedProperty(connectionOptions, optionName)) {
25+
options[optionName] = connectionOptions[optionName];
26+
} else if (utils.hasUserDefinedProperty(baseOptions, optionName)) {
27+
options[optionName] = baseOptions[optionName];
2828
}
2929
}

lib/helpers/query/applyQueryMiddleware.js

Lines changed: 0 additions & 54 deletions
This file was deleted.

lib/helpers/query/castFilterPath.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
const isOperator = require('./isOperator');
44

5-
module.exports = function castFilterPath(query, schematype, val) {
6-
const ctx = query;
5+
module.exports = function castFilterPath(ctx, schematype, val) {
76
const any$conditionals = Object.keys(val).some(isOperator);
87

98
if (!any$conditionals) {

lib/helpers/query/completeMany.js

Lines changed: 0 additions & 36 deletions
This file was deleted.

lib/helpers/query/validOps.js

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,3 @@
11
'use strict';
22

3-
module.exports = Object.freeze([
4-
// Read
5-
'countDocuments',
6-
'distinct',
7-
'estimatedDocumentCount',
8-
'find',
9-
'findOne',
10-
// Update
11-
'findOneAndReplace',
12-
'findOneAndUpdate',
13-
'replaceOne',
14-
'updateMany',
15-
'updateOne',
16-
// Delete
17-
'deleteMany',
18-
'deleteOne',
19-
'findOneAndDelete'
20-
]);
3+
module.exports = require('../../constants').queryMiddlewareFunctions;

lib/model.js

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ const VersionError = require('./error/version');
2222
const ParallelSaveError = require('./error/parallelSave');
2323
const applyDefaultsHelper = require('./helpers/document/applyDefaults');
2424
const applyDefaultsToPOJO = require('./helpers/model/applyDefaultsToPOJO');
25-
const applyQueryMiddleware = require('./helpers/query/applyQueryMiddleware');
2625
const applyHooks = require('./helpers/model/applyHooks');
2726
const applyMethods = require('./helpers/model/applyMethods');
2827
const 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

Comments
 (0)