Files
adopt-a-street/node_modules/mongodb/src/resource_management.ts
William Valentin 5aca521c52 feat: Complete CouchDB migration and Docker configuration
- Add comprehensive CouchDB setup and configuration
- Update Docker files for CouchDB compatibility
- Create Kubernetes manifests for CouchDB deployment
- Add migration scripts and documentation
- Update seeding scripts to support both CouchDB and MongoDB
- Add docker-compose for local development
- Create comprehensive setup and deployment guides

🤖 Generated with [AI Assistant]

Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
2025-11-01 13:32:39 -07:00

75 lines
2.5 KiB
TypeScript

/**
* @public
*/
export interface AsyncDisposable {
/**
* @beta
* @experimental
*/
[Symbol.asyncDispose](): Promise<void>;
/**
* @internal
*
* A method that wraps disposal semantics for a given resource in the class.
*/
asyncDispose(): Promise<void>;
}
/** @internal */
export function configureResourceManagement(target: AsyncDisposable) {
Symbol.asyncDispose &&
Object.defineProperty(target, Symbol.asyncDispose, {
value: async function asyncDispose(this: AsyncDisposable) {
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(...);
* ```
*/
export 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);
}