Initial commit
This commit is contained in:
66
node_modules/mongodb/lib/operations/operation.js
generated
vendored
Normal file
66
node_modules/mongodb/lib/operations/operation.js
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
'use strict';
|
||||
|
||||
const Aspect = {
|
||||
READ_OPERATION: Symbol('READ_OPERATION'),
|
||||
WRITE_OPERATION: Symbol('WRITE_OPERATION'),
|
||||
RETRYABLE: Symbol('RETRYABLE'),
|
||||
EXECUTE_WITH_SELECTION: Symbol('EXECUTE_WITH_SELECTION'),
|
||||
NO_INHERIT_OPTIONS: Symbol('NO_INHERIT_OPTIONS')
|
||||
};
|
||||
|
||||
/**
|
||||
* This class acts as a parent class for any operation and is responsible for setting this.options,
|
||||
* as well as setting and getting a session.
|
||||
* Additionally, this class implements `hasAspect`, which determines whether an operation has
|
||||
* a specific aspect.
|
||||
*/
|
||||
class OperationBase {
|
||||
constructor(options) {
|
||||
this.options = Object.assign({}, options);
|
||||
}
|
||||
|
||||
hasAspect(aspect) {
|
||||
if (this.constructor.aspects == null) {
|
||||
return false;
|
||||
}
|
||||
return this.constructor.aspects.has(aspect);
|
||||
}
|
||||
|
||||
set session(session) {
|
||||
Object.assign(this.options, { session });
|
||||
}
|
||||
|
||||
get session() {
|
||||
return this.options.session;
|
||||
}
|
||||
|
||||
clearSession() {
|
||||
delete this.options.session;
|
||||
}
|
||||
|
||||
get canRetryRead() {
|
||||
return true;
|
||||
}
|
||||
|
||||
execute() {
|
||||
throw new TypeError('`execute` must be implemented for OperationBase subclasses');
|
||||
}
|
||||
}
|
||||
|
||||
function defineAspects(operation, aspects) {
|
||||
if (!Array.isArray(aspects) && !(aspects instanceof Set)) {
|
||||
aspects = [aspects];
|
||||
}
|
||||
aspects = new Set(aspects);
|
||||
Object.defineProperty(operation, 'aspects', {
|
||||
value: aspects,
|
||||
writable: false
|
||||
});
|
||||
return aspects;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
Aspect,
|
||||
defineAspects,
|
||||
OperationBase
|
||||
};
|
||||
Reference in New Issue
Block a user