Skip to content

Commit 4b7d9de

Browse files
committed
use enum to check verbosity strings
1 parent f976582 commit 4b7d9de

File tree

5 files changed

+22
-7
lines changed

5 files changed

+22
-7
lines changed

lib/core/wireprotocol/query.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const maxWireVersion = require('../utils').maxWireVersion;
99
const applyCommonQueryOptions = require('./shared').applyCommonQueryOptions;
1010
const command = require('./command');
1111
const decorateWithExplain = require('../../utils').decorateWithExplain;
12-
const Explain = require('../../explain');
12+
const Explain = require('../../explain').Explain;
1313

1414
function query(server, ns, cmd, cursorState, options, callback) {
1515
options = options || {};

lib/core/wireprotocol/write_command.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const MongoError = require('../error').MongoError;
44
const collectionNamespace = require('./shared').collectionNamespace;
55
const command = require('./command');
66
const decorateWithExplain = require('../../utils').decorateWithExplain;
7-
const Explain = require('../../explain');
7+
const Explain = require('../../explain').Explain;
88

99
function writeCommand(server, type, opsField, ns, ops, options, callback) {
1010
if (ops.length === 0) throw new MongoError(`${type} must contain at least one document`);

lib/cursor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const Map = require('./core').BSON.Map;
1212
const maybePromise = require('./utils').maybePromise;
1313
const executeOperation = require('./operations/execute_operation');
1414
const formattedOrderClause = require('./utils').formattedOrderClause;
15-
const Explain = require('./explain');
15+
const Explain = require('./explain').Explain;
1616
const Aspect = require('./operations/operation').Aspect;
1717

1818
const each = require('./operations/cursor_ops').each;

lib/explain.js

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

3+
const MongoError = require('./core/error').MongoError;
4+
5+
const ExplainVerbosity = {
6+
queryPlanner: 'queryPlanner',
7+
queryPlannerExtended: 'queryPlannerExtended',
8+
executionStats: 'executionStats',
9+
allPlansExecution: 'allPlansExecution'
10+
};
11+
312
/**
413
* @class
514
* @property {string} verbosity The verbosity mode for the explain output
@@ -25,16 +34,22 @@ class Explain {
2534
/**
2635
* Construct an Explain given an options object.
2736
*
28-
* @param {object} options The options object from which to extract the explain.
37+
* @param {object} [options] The options object from which to extract the explain.
38+
* @param {'queryPlanner'|'queryPlannerExtended'|'executionStats'|'allPlansExecution'|boolean} [options.explain] The verbosity mode for the explain output
2939
* @return {Explain}
3040
*/
3141
static fromOptions(options) {
3242
if (options == null || options.explain === undefined) {
3343
return;
3444
}
3545

36-
return new Explain(options.explain);
46+
const explain = options.explain;
47+
if (typeof explain === 'boolean' || explain in ExplainVerbosity) {
48+
return new Explain(options.explain);
49+
}
50+
51+
throw new MongoError(`explain must be one of ${Object.keys(ExplainVerbosity)} or a boolean`);
3752
}
3853
}
3954

40-
module.exports = Explain;
55+
module.exports = { Explain };

lib/operations/operation.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 Explain = require('../explain');
3+
const Explain = require('../explain').Explain;
44
const MongoError = require('../core').MongoError;
55

66
const Aspect = {

0 commit comments

Comments
 (0)