You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.5 KiB
58 lines
2.5 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.configureResourceManagement = configureResourceManagement; |
|
exports.configureExplicitResourceManagement = configureExplicitResourceManagement; |
|
/** @internal */ |
|
function configureResourceManagement(target) { |
|
Symbol.asyncDispose && |
|
Object.defineProperty(target, Symbol.asyncDispose, { |
|
value: async function asyncDispose() { |
|
await this.asyncDispose(); |
|
}, |
|
enumerable: false, |
|
configurable: true, |
|
writable: true |
|
}); |
|
} |
|
/** |
|
* @beta |
|
* @experimental |
|
* |
|
* Attaches `Symbol.asyncDispose` methods to the MongoClient, Cursors, sessions and change streams |
|
* if Symbol.asyncDispose is defined. |
|
* |
|
* It's usually not necessary to call this method - the driver attempts to attach these methods |
|
* itself when its loaded. However, sometimes the driver may be loaded before `Symbol.asyncDispose` |
|
* is defined, in which case it is necessary to call this method directly. This can happen if the |
|
* application is polyfilling `Symbol.asyncDispose`. |
|
* |
|
* Example: |
|
* |
|
* ```typescript |
|
* import { configureExplicitResourceManagement, MongoClient } from 'mongodb/lib/beta'; |
|
* |
|
* Symbol.asyncDispose ??= Symbol('dispose'); |
|
* load(); |
|
* |
|
* await using client = new MongoClient(...); |
|
* ``` |
|
*/ |
|
function configureExplicitResourceManagement() { |
|
// We must import lazily here, because there's a circular dependency between the resource management |
|
// file and each resources' file. We could move `configureResourceManagement` to a separate |
|
// function, but keeping all resource-management related code together seemed preferable and I chose |
|
// lazy requiring of resources instead. |
|
// eslint-disable-next-line @typescript-eslint/no-require-imports |
|
const { MongoClient } = require('./mongo_client'); |
|
// eslint-disable-next-line @typescript-eslint/no-require-imports |
|
const { ClientSession } = require('./sessions'); |
|
// eslint-disable-next-line @typescript-eslint/no-require-imports |
|
const { AbstractCursor } = require('./cursor/abstract_cursor'); |
|
// eslint-disable-next-line @typescript-eslint/no-require-imports |
|
const { ChangeStream } = require('./change_stream'); |
|
configureResourceManagement(MongoClient.prototype); |
|
configureResourceManagement(ClientSession.prototype); |
|
configureResourceManagement(AbstractCursor.prototype); |
|
configureResourceManagement(ChangeStream.prototype); |
|
} |
|
//# sourceMappingURL=resource_management.js.map
|