mongo-seeding
Version:
The ultimate Node.js library for populating your MongoDB database.
73 lines • 2.97 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseConnector = void 0;
const mongodb_1 = require("mongodb");
const _1 = require(".");
/**
* Provides functionality to manage connection to a MongoDB database.
*/
class DatabaseConnector {
/**
* Constructs the `DatabaseConnector` object.
*
* @param reconnectTimeoutMillis Reconnect timeout in milliseconds. Ignored when custom MongoClientOptions are passed.
* @param mongoClientOptions Optional Mongo Client options
* @param log Optional logger
*/
constructor(reconnectTimeoutMillis, mongoClientOptions, log) {
this.clientOptions =
mongoClientOptions != null
? mongoClientOptions
: Object.assign(Object.assign({}, DatabaseConnector.DEFAULT_CLIENT_OPTIONS), { connectTimeoutMS: reconnectTimeoutMillis });
this.log = log
? log
: () => {
// do nothing
};
}
/**
* Connects to database.
*
* @param connectionString Database connection string
*/
connect(connectionString) {
return __awaiter(this, void 0, void 0, function* () {
const mongoClient = new mongodb_1.MongoClient(connectionString, this.clientOptions);
this.log(`Connecting to ${this.maskUriCredentials(connectionString)}...`);
yield mongoClient.connect();
this.log('Connection with database established.');
return new _1.Database(mongoClient);
});
}
/**
* Detects database connection credentials and masks them, replacing with masked URI credentials token.
*
* @param uri Database connection URI
*/
maskUriCredentials(uri) {
if (!uri.includes('@')) {
return uri;
}
const creds = uri.substring(uri.indexOf('://') + 3, uri.indexOf('@'));
return uri.replace(creds, DatabaseConnector.MASKED_URI_CREDENTIALS);
}
}
exports.DatabaseConnector = DatabaseConnector;
/**
* Masked URI credentials token.
*/
DatabaseConnector.MASKED_URI_CREDENTIALS = '[secure]';
DatabaseConnector.DEFAULT_CLIENT_OPTIONS = {
ignoreUndefined: true,
connectTimeoutMS: 10000,
};
//# sourceMappingURL=database-connector.js.map