refactor: lerna preparations

This commit is contained in:
nodkz
2019-04-08 13:06:47 +06:00
parent fb62a7e098
commit f67f9e5e59
71 changed files with 3935 additions and 78 deletions
+6
View File
@@ -0,0 +1,6 @@
{
"packages": [
"packages/*"
],
"version": "0.0.0"
}
+11 -38
View File
@@ -1,28 +1,9 @@
{
"name": "mongodb-memory-server",
"name": "lerna-monorepo",
"private": true,
"version": "0.0.0-development",
"description": "In-memory MongoDB Server. Designed with testing in mind, the server will allow you to connect your favourite ODM or client library to the MongoDB Server and run integration tests isolated from each other.",
"main": "lib/index",
"types": "lib/index.d.ts",
"repository": "https://github.com/nodkz/mongodb-memory-server",
"files": [
"lib",
"scripts"
],
"keywords": [
"mongodb",
"mongoose",
"mock",
"stub",
"mockgoose",
"mongodb-prebuilt",
"mongomem"
],
"license": "MIT",
"bugs": {
"url": "https://github.com/nodkz/mongodb-memory-server/issues"
},
"homepage": "https://github.com/nodkz/mongodb-memory-server",
"devDependencies": {
"@types/decompress": "^4.2.3",
"@types/dedent": "^0.7.0",
@@ -45,6 +26,7 @@
"eslint-plugin-prettier": "^3.0.1",
"flowgen": "^1.7.0",
"jest": "^24.3.1",
"lerna": "^3.13.1",
"mongodb": "^3.1.13",
"npm-run-all": "^4.1.5",
"prettier": "^1.16.4",
@@ -67,24 +49,15 @@
"tmp": "^0.0.33",
"uuid": "^3.2.1"
},
"peerDependencies": {
"mongodb": ">= 3.0"
"workspaces": {
"packages": [
"packages/*"
]
},
"scripts": {
"build": "npm-run-all build:*",
"build:ts": "rimraf ./lib && tsc -p ./tsconfig.build.json",
"disabled-build:flow": "find ./lib -name \"*.d.ts\" -exec bash -c './node_modules/.bin/flowgen --add-flow-header \"$1\" -o \"${1%.d.ts}\".js.flow' - '{}' \\;",
"watch": "cross-env MONGOMS_DOWNLOAD_DIR=./tmp jest --watch",
"coverage": "cross-env MONGOMS_DOWNLOAD_DIR=./tmp jest --coverage",
"lint": "eslint 'src/**/*.{js,ts}'",
"test": "npm run lint && npm run tscheck && npm run coverage",
"tscheck": "tsc --noEmit",
"semantic-release": "semantic-release",
"postinstall": "node ./scripts/postinstall.js"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
"test": "jest --projects packages/*",
"watch": "npm test -- --watchAll",
"coverage": "npm test -- --coverage",
"compile": "tsc --build tsconfig.build.json"
}
}
@@ -0,0 +1,83 @@
/// <reference types="node" />
import { EventEmitter } from 'events';
import { Admin } from 'mongodb';
import MongoMemoryServer from './MongoMemoryServer';
import { MongoBinaryOpts } from './util/MongoBinary';
import { DebugFn, MongoMemoryInstancePropT, MongoMemoryInstancePropBaseT, SpawnOptions, StorageEngineT } from './types';
/**
* Replica set specific options.
*
* @property {boolean} auth enable auth; (default: false)
* @property {string[]} args additional command line args passed to `mongod`
* @property {number} count number of `mongod` servers to start (default: 1)
* @property {string} dbName database name used in connection string
* @property {string} ip bind to all IP addresses specify `::,0.0.0.0`; (default '127.0.0.1')
* @property {string} name replSet name (default: 'testset')
* @property {number} oplogSize oplog size (in MB); (default: 1)
* @property {StorageEngineT} storageEngine `mongod` storage engine type; (default: 'ephemeralForTest')
*/
export interface ReplSetOpts {
auth: boolean;
args: string[];
count: number;
dbName: string;
ip: string;
name: string;
oplogSize: number;
spawn: SpawnOptions;
storageEngine: StorageEngineT;
configSettings?: MongoMemoryReplSetConfigSettingsT;
}
export interface MongoMemoryReplSetConfigSettingsT {
chainingAllowed?: boolean;
heartbeatTimeoutSecs?: number;
heartbeatIntervalMillis?: number;
electionTimeoutMillis?: number;
catchUpTimeoutMillis?: number;
}
export interface MongoMemoryReplSetOptsT {
instanceOpts: MongoMemoryInstancePropBaseT[];
binary: MongoBinaryOpts;
replSet: ReplSetOpts;
autoStart?: boolean;
debug?: boolean;
}
export default class MongoMemoryReplSet extends EventEmitter {
servers: MongoMemoryServer[];
opts: MongoMemoryReplSetOptsT;
debug: DebugFn;
_state: 'init' | 'running' | 'stopped';
admin?: Admin;
constructor(opts?: Partial<MongoMemoryReplSetOptsT>);
getConnectionString(otherDb?: string | boolean): Promise<string>;
/**
* Returns database name.
*/
getDbName(): Promise<string>;
/**
* Returns instance options suitable for a MongoMemoryServer.
* @param {MongoMemoryInstancePropBaseT} baseOpts
*/
getInstanceOpts(baseOpts?: MongoMemoryInstancePropBaseT): MongoMemoryInstancePropT;
/**
* Returns a mongodb: URI to connect to a given database.
*/
getUri(otherDb?: string | boolean): Promise<string>;
/**
* Start underlying `mongod` instances.
*/
start(): Promise<void>;
/**
* Stop the underlying `mongod` instance(s).
*/
stop(): Promise<boolean>;
waitUntilRunning(): Promise<void>;
/**
* Connects to the first server from the list of servers and issues the `replSetInitiate`
* command passing in a new replica set configuration object.
*/
_initReplSet(): Promise<void>;
_startServer(instanceOpts: MongoMemoryInstancePropT): MongoMemoryServer;
_waitForPrimary(): Promise<boolean>;
}
//# sourceMappingURL=MongoMemoryReplSet.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"MongoMemoryReplSet.d.ts","sourceRoot":"","sources":["../src/MongoMemoryReplSet.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,KAAK,EAAe,MAAM,SAAS,CAAC;AAC7C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,4BAA4B,EAC5B,YAAY,EACZ,cAAc,EAEf,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,cAAc,CAAC;IAC9B,cAAc,CAAC,EAAE,iCAAiC,CAAC;CACpD;AAED,MAAM,WAAW,iCAAiC;IAChD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,4BAA4B,EAAE,CAAC;IAC7C,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,YAAY;IAC1D,OAAO,EAAE,iBAAiB,EAAE,CAAM;IAClC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEF,IAAI,GAAE,OAAO,CAAC,uBAAuB,CAAM;IAiCjD,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAItE;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAOlC;;;OAGG;IACH,eAAe,CAAC,QAAQ,GAAE,4BAAiC,GAAG,wBAAwB;IAkBtF;;OAEG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBzD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBxB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCnC,YAAY,CAAC,YAAY,EAAE,wBAAwB,GAAG,iBAAiB;IAYjE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;CAa1C"}
@@ -0,0 +1,362 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var events_1 = require("events");
var mongodb_1 = require("mongodb");
var MongoMemoryServer_1 = __importDefault(require("./MongoMemoryServer"));
var db_util_1 = require("./util/db_util");
var MongoMemoryReplSet = /** @class */ (function (_super) {
__extends(MongoMemoryReplSet, _super);
function MongoMemoryReplSet(opts) {
if (opts === void 0) { opts = {}; }
var _this = _super.call(this) || this;
_this.servers = [];
var replSetDefaults = {
auth: false,
args: [],
name: 'testset',
count: 1,
dbName: db_util_1.generateDbName(),
ip: '127.0.0.1',
oplogSize: 1,
spawn: {},
storageEngine: 'ephemeralForTest',
};
_this._state = 'stopped';
_this.opts = {
binary: opts.binary || {},
debug: !!opts.debug,
instanceOpts: opts.instanceOpts || [],
replSet: __assign({}, replSetDefaults, opts.replSet),
};
_this.opts.replSet.args.push('--oplogSize', "" + _this.opts.replSet.oplogSize);
_this.debug = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (!_this.opts.debug)
return;
console.log.apply(console, args);
};
if (!(opts && opts.autoStart === false)) {
_this.debug('Autostarting MongoMemoryReplSet.');
setTimeout(function () { return _this.start(); }, 0);
}
process.on('beforeExit', function () { return _this.stop(); });
return _this;
}
MongoMemoryReplSet.prototype.getConnectionString = function (otherDb) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.getUri(otherDb)];
});
});
};
/**
* Returns database name.
*/
MongoMemoryReplSet.prototype.getDbName = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
// this function is only async for consistency with MongoMemoryServer
// I don't see much point to either of them being async but don't
// care enough to change it and introduce a breaking change.
return [2 /*return*/, this.opts.replSet.dbName];
});
});
};
/**
* Returns instance options suitable for a MongoMemoryServer.
* @param {MongoMemoryInstancePropBaseT} baseOpts
*/
MongoMemoryReplSet.prototype.getInstanceOpts = function (baseOpts) {
if (baseOpts === void 0) { baseOpts = {}; }
var rsOpts = this.opts.replSet;
var opts = {
auth: !!rsOpts.auth,
args: rsOpts.args,
dbName: rsOpts.dbName,
ip: rsOpts.ip,
replSet: rsOpts.name,
storageEngine: rsOpts.storageEngine,
};
if (baseOpts.args)
opts.args = rsOpts.args.concat(baseOpts.args);
if (baseOpts.port)
opts.port = baseOpts.port;
if (baseOpts.dbPath)
opts.dbPath = baseOpts.dbPath;
if (baseOpts.storageEngine)
opts.storageEngine = baseOpts.storageEngine;
this.debug(' instance opts:', opts);
return opts;
};
/**
* Returns a mongodb: URI to connect to a given database.
*/
MongoMemoryReplSet.prototype.getUri = function (otherDb) {
return __awaiter(this, void 0, void 0, function () {
var dbName, ports, hosts;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(this._state === 'init')) return [3 /*break*/, 2];
return [4 /*yield*/, this._waitForPrimary()];
case 1:
_a.sent();
_a.label = 2;
case 2:
if (this._state !== 'running') {
throw new Error('Replica Set is not running. Use opts.debug for more info.');
}
if (otherDb) {
dbName = typeof otherDb === 'string' ? otherDb : db_util_1.generateDbName();
}
else {
dbName = this.opts.replSet.dbName;
}
return [4 /*yield*/, Promise.all(this.servers.map(function (s) { return s.getPort(); }))];
case 3:
ports = _a.sent();
hosts = ports.map(function (port) { return "127.0.0.1:" + port; }).join(',');
return [2 /*return*/, "mongodb://" + hosts + "/" + dbName];
}
});
});
};
/**
* Start underlying `mongod` instances.
*/
MongoMemoryReplSet.prototype.start = function () {
return __awaiter(this, void 0, void 0, function () {
var servers, server;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.debug('start');
if (this._state !== 'stopped') {
throw new Error("Already in 'init' or 'running' state. Use opts.debug = true for more info.");
}
this.emit((this._state = 'init'));
this.debug('init');
servers = this.opts.instanceOpts.map(function (opts) {
_this.debug(' starting server from instanceOpts:', opts, '...');
return _this._startServer(_this.getInstanceOpts(opts));
});
while (servers.length < this.opts.replSet.count) {
this.debug(' starting a server due to count...');
server = this._startServer(this.getInstanceOpts({}));
servers.push(server);
}
this.servers = servers;
// Brief delay to wait for servers to start up.
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
case 1:
// Brief delay to wait for servers to start up.
_a.sent();
return [4 /*yield*/, this._initReplSet()];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Stop the underlying `mongod` instance(s).
*/
MongoMemoryReplSet.prototype.stop = function () {
return __awaiter(this, void 0, void 0, function () {
var servers;
var _this = this;
return __generator(this, function (_a) {
if (this._state === 'stopped')
return [2 /*return*/, false];
servers = this.servers;
this.servers = [];
return [2 /*return*/, Promise.all(servers.map(function (s) { return s.stop(); }))
.then(function () {
_this.emit((_this._state = 'stopped'));
return true;
})
.catch(function (err) {
_this.debug(err);
_this.emit((_this._state = 'stopped'), err);
return false;
})];
});
});
};
MongoMemoryReplSet.prototype.waitUntilRunning = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this._state === 'running')
return [2 /*return*/];
return [4 /*yield*/, new Promise(function (resolve) { return _this.once('running', function () { return resolve(); }); })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Connects to the first server from the list of servers and issues the `replSetInitiate`
* command passing in a new replica set configuration object.
*/
MongoMemoryReplSet.prototype._initReplSet = function () {
return __awaiter(this, void 0, void 0, function () {
var uris, conn, db, members, rsConfig;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this._state !== 'init') {
throw new Error('Not in init phase.');
}
this.debug('Initializing replica set.');
if (!this.servers.length) {
throw new Error('One or more server is required.');
}
return [4 /*yield*/, Promise.all(this.servers.map(function (server) { return server.getUri(); }))];
case 1:
uris = _a.sent();
return [4 /*yield*/, mongodb_1.MongoClient.connect(uris[0], { useNewUrlParser: true })];
case 2:
conn = _a.sent();
_a.label = 3;
case 3:
_a.trys.push([3, , 7, 9]);
return [4 /*yield*/, conn.db(this.opts.replSet.dbName)];
case 4:
db = _a.sent();
this.admin = db.admin();
members = uris.map(function (uri, idx) { return ({ _id: idx, host: db_util_1.getHost(uri) }); });
rsConfig = {
_id: this.opts.replSet.name,
members: members,
settings: __assign({ electionTimeoutMillis: 500 }, (this.opts.replSet.configSettings || {})),
};
return [4 /*yield*/, this.admin.command({ replSetInitiate: rsConfig })];
case 5:
_a.sent();
this.debug('Waiting for replica set to have a PRIMARY member.');
return [4 /*yield*/, this._waitForPrimary()];
case 6:
_a.sent();
this.emit((this._state = 'running'));
this.debug('running');
return [3 /*break*/, 9];
case 7: return [4 /*yield*/, conn.close()];
case 8:
_a.sent();
return [7 /*endfinally*/];
case 9: return [2 /*return*/];
}
});
});
};
MongoMemoryReplSet.prototype._startServer = function (instanceOpts) {
var serverOpts = {
autoStart: true,
debug: this.opts.debug,
binary: this.opts.binary,
instance: instanceOpts,
spawn: this.opts.replSet.spawn,
};
var server = new MongoMemoryServer_1.default(serverOpts);
return server;
};
MongoMemoryReplSet.prototype._waitForPrimary = function () {
return __awaiter(this, void 0, void 0, function () {
var replStatus, hasPrimary;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.admin) {
return [2 /*return*/, false];
}
return [4 /*yield*/, this.admin.command({ replSetGetStatus: 1 })];
case 1:
replStatus = _a.sent();
this.debug(' replStatus:', replStatus);
hasPrimary = replStatus.members.some(function (m) { return m.stateStr === 'PRIMARY'; });
if (!hasPrimary) {
this.debug('No PRIMARY yet. Waiting...');
return [2 /*return*/, new Promise(function (resolve) { return setTimeout(function () { return resolve(_this._waitForPrimary()); }, 1000); })];
}
return [2 /*return*/, true];
}
});
});
};
return MongoMemoryReplSet;
}(events_1.EventEmitter));
exports.default = MongoMemoryReplSet;
//# sourceMappingURL=MongoMemoryReplSet.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,45 @@
/// <reference types="node" />
import { ChildProcess } from 'child_process';
import MongoInstance from './util/MongoInstance';
import { MongoBinaryOpts } from './util/MongoBinary';
import { CallbackFn, DebugFn, MongoMemoryInstancePropT, StorageEngineT, SpawnOptions } from './types';
export interface MongoMemoryServerOptsT {
instance?: MongoMemoryInstancePropT;
binary?: MongoBinaryOpts;
debug?: boolean;
spawn?: SpawnOptions;
autoStart?: boolean;
}
export interface MongoInstanceDataT {
port: number;
dbPath: string;
dbName: string;
uri: string;
storageEngine: StorageEngineT;
instance: MongoInstance;
childProcess: ChildProcess;
tmpDir?: {
name: string;
removeCallback: CallbackFn;
};
replSet?: string;
}
export default class MongoMemoryServer {
runningInstance: Promise<MongoInstanceDataT> | null;
instanceInfoSync: MongoInstanceDataT | null;
opts: MongoMemoryServerOptsT;
debug: DebugFn;
constructor(opts?: MongoMemoryServerOptsT);
start(): Promise<boolean>;
_startUpInstance(): Promise<MongoInstanceDataT>;
stop(): Promise<boolean>;
getInstanceInfo(): MongoInstanceDataT | false;
getInstanceData(): Promise<MongoInstanceDataT>;
ensureInstance(): Promise<MongoInstanceDataT>;
getUri(otherDbName?: string | boolean): Promise<string>;
getConnectionString(otherDbName?: string | boolean): Promise<string>;
getPort(): Promise<number>;
getDbPath(): Promise<string>;
getDbName(): Promise<string>;
}
//# sourceMappingURL=MongoMemoryServer.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"MongoMemoryServer.d.ts","sourceRoot":"","sources":["../src/MongoMemoryServer.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAI7C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,UAAU,EACV,OAAO,EACP,wBAAwB,EACxB,cAAc,EACd,YAAY,EACb,MAAM,SAAS,CAAC;AAMjB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,cAAc,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,UAAU,CAAC;KAC5B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,eAAe,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAQ;IAC3D,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IACnD,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;gBAEH,IAAI,CAAC,EAAE,sBAAsB;IAcnC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAmCzB,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAgD/C,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAmB9B,eAAe,IAAI,kBAAkB,GAAG,KAAK;IAKvC,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAO9C,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAe7C,MAAM,CAAC,WAAW,GAAE,MAAM,GAAG,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB9D,mBAAmB,CAAC,WAAW,GAAE,MAAM,GAAG,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3E,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAK1B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAInC"}
@@ -0,0 +1,302 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _this = this;
Object.defineProperty(exports, "__esModule", { value: true });
var tmp_1 = __importDefault(require("tmp"));
var get_port_1 = __importDefault(require("get-port"));
var db_util_1 = require("./util/db_util");
var MongoInstance_1 = __importDefault(require("./util/MongoInstance"));
var deprecate_1 = require("./util/deprecate");
tmp_1.default.setGracefulCleanup();
var generateConnectionString = function (port, dbName) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, "mongodb://127.0.0.1:" + port + "/" + dbName];
});
}); };
var MongoMemoryServer = /** @class */ (function () {
function MongoMemoryServer(opts) {
var _this = this;
this.runningInstance = null;
this.instanceInfoSync = null;
this.opts = __assign({}, opts);
this.debug = function (msg) {
if (_this.opts.debug) {
console.log(msg);
}
};
if (!(opts && opts.autoStart === false)) {
this.debug('Autostarting MongoDB instance...');
this.start();
}
}
MongoMemoryServer.prototype.start = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
this.debug('Called MongoMemoryServer.start() method:');
if (this.runningInstance) {
throw new Error('MongoDB instance already in status startup/running/error. Use opts.debug = true for more info.');
}
this.runningInstance = this._startUpInstance()
.catch(function (err) {
if (err.message === 'Mongod shutting down' || err === 'Mongod shutting down') {
_this.debug("Mongodb does not started. Trying to start on another port one more time...");
if (_this.opts.instance && _this.opts.instance.port) {
_this.opts.instance.port = null;
}
return _this._startUpInstance();
}
throw err;
})
.catch(function (err) {
if (!_this.opts.debug) {
throw new Error(err.message + "\n\nUse debug option for more info: " +
"new MongoMemoryServer({ debug: true })");
}
throw err;
});
return [2 /*return*/, this.runningInstance.then(function (data) {
_this.instanceInfoSync = data;
return true;
})];
});
});
};
MongoMemoryServer.prototype._startUpInstance = function () {
return __awaiter(this, void 0, void 0, function () {
var data, tmpDir, instOpts, _a, _b, instance;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
data = {};
instOpts = this.opts.instance;
_a = data;
return [4 /*yield*/, get_port_1.default({ port: (instOpts && instOpts.port) || undefined })];
case 1:
_a.port = _c.sent();
data.dbName = db_util_1.generateDbName(instOpts && instOpts.dbName);
_b = data;
return [4 /*yield*/, generateConnectionString(data.port, data.dbName)];
case 2:
_b.uri = _c.sent();
data.storageEngine = (instOpts && instOpts.storageEngine) || 'ephemeralForTest';
data.replSet = instOpts && instOpts.replSet;
if (instOpts && instOpts.dbPath) {
data.dbPath = instOpts.dbPath;
}
else {
tmpDir = tmp_1.default.dirSync({
discardDescriptor: true,
mode: 493,
prefix: 'mongo-mem-',
unsafeCleanup: true,
});
data.dbPath = tmpDir.name;
data.tmpDir = tmpDir;
}
this.debug("Starting MongoDB instance with following options: " + JSON.stringify(data));
return [4 /*yield*/, MongoInstance_1.default.run({
instance: {
dbPath: data.dbPath,
debug: this.opts.instance && this.opts.instance.debug,
port: data.port,
storageEngine: data.storageEngine,
replSet: data.replSet,
args: this.opts.instance && this.opts.instance.args,
auth: this.opts.instance && this.opts.instance.auth,
ip: this.opts.instance && this.opts.instance.ip,
},
binary: this.opts.binary,
spawn: this.opts.spawn,
debug: this.debug,
})];
case 3:
instance = _c.sent();
data.instance = instance;
data.childProcess = instance.childProcess;
return [2 /*return*/, data];
}
});
});
};
MongoMemoryServer.prototype.stop = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, instance, port, tmpDir;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
this.debug('Called MongoMemoryServer.stop() method');
return [4 /*yield*/, this.ensureInstance()];
case 1:
_a = _b.sent(), instance = _a.instance, port = _a.port, tmpDir = _a.tmpDir;
this.debug("Shutdown MongoDB server on port " + port + " with pid " + (instance.getPid() || ''));
return [4 /*yield*/, instance.kill()];
case 2:
_b.sent();
this.runningInstance = null;
this.instanceInfoSync = null;
if (tmpDir) {
this.debug("Removing tmpDir " + tmpDir.name);
tmpDir.removeCallback();
}
return [2 /*return*/, true];
}
});
});
};
MongoMemoryServer.prototype.getInstanceInfo = function () {
return this.instanceInfoSync || false;
};
/* @deprecated 5.0.0 */
MongoMemoryServer.prototype.getInstanceData = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
deprecate_1.deprecate("method MongoMemoryServer.getInstanceData() will be deprecated. Please use 'MongoMemoryServer.ensureInstance()' method instead.");
return [2 /*return*/, this.ensureInstance()];
});
});
};
MongoMemoryServer.prototype.ensureInstance = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.debug('Called MongoMemoryServer.ensureInstance() method:');
if (!!this.runningInstance) return [3 /*break*/, 2];
this.debug(' - no running instance, call `start()` command');
return [4 /*yield*/, this.start()];
case 1:
_a.sent();
this.debug(' - `start()` command was succesfully resolved');
_a.label = 2;
case 2:
if (this.runningInstance) {
return [2 /*return*/, this.runningInstance];
}
throw new Error('Database instance is not running. You should start database by calling start() method. BTW it should start automatically if opts.autoStart!=false. Also you may provide opts.debug=true for more info.');
}
});
});
};
MongoMemoryServer.prototype.getUri = function (otherDbName) {
if (otherDbName === void 0) { otherDbName = false; }
return __awaiter(this, void 0, void 0, function () {
var _a, uri, port;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.ensureInstance()];
case 1:
_a = _b.sent(), uri = _a.uri, port = _a.port;
// IF true OR string
if (otherDbName) {
if (typeof otherDbName === 'string') {
// generate uri with provided DB name on existed DB instance
return [2 /*return*/, generateConnectionString(port, otherDbName)];
}
// generate new random db name
return [2 /*return*/, generateConnectionString(port, db_util_1.generateDbName())];
}
return [2 /*return*/, uri];
}
});
});
};
MongoMemoryServer.prototype.getConnectionString = function (otherDbName) {
if (otherDbName === void 0) { otherDbName = false; }
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.getUri(otherDbName)];
});
});
};
MongoMemoryServer.prototype.getPort = function () {
return __awaiter(this, void 0, void 0, function () {
var port;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.ensureInstance()];
case 1:
port = (_a.sent()).port;
return [2 /*return*/, port];
}
});
});
};
MongoMemoryServer.prototype.getDbPath = function () {
return __awaiter(this, void 0, void 0, function () {
var dbPath;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.ensureInstance()];
case 1:
dbPath = (_a.sent()).dbPath;
return [2 /*return*/, dbPath];
}
});
});
};
MongoMemoryServer.prototype.getDbName = function () {
return __awaiter(this, void 0, void 0, function () {
var dbName;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.ensureInstance()];
case 1:
dbName = (_a.sent()).dbName;
return [2 /*return*/, dbName];
}
});
});
};
return MongoMemoryServer;
}());
exports.default = MongoMemoryServer;
//# sourceMappingURL=MongoMemoryServer.js.map
File diff suppressed because one or more lines are too long
+7
View File
@@ -0,0 +1,7 @@
import MongoBinary from './util/MongoBinary';
import MongoInstance from './util/MongoInstance';
import MongoMemoryServer from './MongoMemoryServer';
import MongoMemoryReplSet from './MongoMemoryReplSet';
export default MongoMemoryServer;
export { MongoBinary, MongoInstance, MongoMemoryServer, MongoMemoryReplSet };
//# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,eAAe,iBAAiB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,15 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var MongoBinary_1 = __importDefault(require("./util/MongoBinary"));
exports.MongoBinary = MongoBinary_1.default;
var MongoInstance_1 = __importDefault(require("./util/MongoInstance"));
exports.MongoInstance = MongoInstance_1.default;
var MongoMemoryServer_1 = __importDefault(require("./MongoMemoryServer"));
exports.MongoMemoryServer = MongoMemoryServer_1.default;
var MongoMemoryReplSet_1 = __importDefault(require("./MongoMemoryReplSet"));
exports.MongoMemoryReplSet = MongoMemoryReplSet_1.default;
exports.default = MongoMemoryServer_1.default;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,mEAA6C;AAMpC,sBANF,qBAAW,CAME;AALpB,uEAAiD;AAK3B,wBALf,uBAAa,CAKe;AAJnC,0EAAoD;AAIf,4BAJ9B,2BAAiB,CAI8B;AAHtD,4EAAsD;AAGE,6BAHjD,4BAAkB,CAGiD;AAD1E,kBAAe,2BAAiB,CAAC"}
+38
View File
@@ -0,0 +1,38 @@
export declare type DebugFn = (...args: any[]) => any;
export declare type DebugPropT = boolean | DebugFn;
export interface DownloadProgressT {
current: number;
length: number;
totalMb: number;
lastPrintedAt: number;
}
export declare type CallbackFn = (...args: any[]) => any;
export { SpawnOptions } from 'child_process';
export declare type StorageEngineT = 'devnull' | 'ephemeralForTest' | 'mmapv1' | 'wiredTiger';
export interface MongoMemoryInstancePropBaseT {
args?: string[];
port?: number | null;
dbPath?: string;
storageEngine?: StorageEngineT;
}
export interface MongoMemoryInstancePropT extends MongoMemoryInstancePropBaseT {
auth?: boolean;
dbName?: string;
debug?: DebugPropT;
ip?: string;
replSet?: string;
storageEngine?: StorageEngineT;
}
export interface ReplStatusMemberT {
_id: number;
name: string;
health: number;
state: number;
stateStr: string;
uptime: number;
}
export interface ReplStatusResultT {
set: string;
members: ReplStatusMemberT[];
}
//# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAC9C,oBAAY,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,oBAAY,UAAU,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,oBAAY,cAAc,GAAG,SAAS,GAAG,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEtF,MAAM,WAAW,4BAA4B;IAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,wBAAyB,SAAQ,4BAA4B;IAC5E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B"}
@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
import { DebugFn } from '../types';
export declare const LATEST_VERSION: string;
export interface MongoBinaryCache {
[version: string]: string;
}
export interface MongoBinaryOpts {
version?: string;
downloadDir?: string;
platform?: string;
arch?: string;
debug?: boolean | Function;
}
export default class MongoBinary {
static cache: MongoBinaryCache;
static debug: DebugFn;
static getSystemPath(systemBinary: string): Promise<string>;
static getCachePath(version: string): Promise<string>;
static getDownloadPath(options: any): Promise<string>;
static getPath(opts?: MongoBinaryOpts): Promise<string>;
static hasValidBinPath(files: string[]): boolean;
}
//# sourceMappingURL=MongoBinary.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"MongoBinary.d.ts","sourceRoot":"","sources":["../../src/util/MongoBinary.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAKnC,eAAO,MAAM,cAAc,EAAE,MAAgB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAM;IACpC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;WAET,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAepD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAI9C,eAAe,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;WAmD9C,OAAO,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiFjE,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;CAQjD"}
@@ -0,0 +1,263 @@
"use strict";
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
return cooked;
};
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var fs_1 = __importDefault(require("fs"));
var os_1 = __importDefault(require("os"));
var path_1 = __importDefault(require("path"));
var lockfile_1 = __importDefault(require("lockfile"));
var mkdirp_1 = __importDefault(require("mkdirp"));
var find_cache_dir_1 = __importDefault(require("find-cache-dir"));
var child_process_1 = require("child_process");
var dedent_1 = __importDefault(require("dedent"));
var util_1 = require("util");
var MongoBinaryDownload_1 = __importDefault(require("./MongoBinaryDownload"));
// TODO: return back `latest` version when it will be fixed in MongoDB distro (for now use 4.0.3 😂)
// More details in https://github.com/nodkz/mongodb-memory-server/issues/131
// export const LATEST_VERSION = 'latest';
exports.LATEST_VERSION = '4.0.3';
var MongoBinary = /** @class */ (function () {
function MongoBinary() {
}
MongoBinary.getSystemPath = function (systemBinary) {
return __awaiter(this, void 0, void 0, function () {
var binaryPath, err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
binaryPath = '';
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, util_1.promisify(fs_1.default.access)(systemBinary)];
case 2:
_a.sent();
this.debug("MongoBinary: found sytem binary path at " + systemBinary);
binaryPath = systemBinary;
return [3 /*break*/, 4];
case 3:
err_1 = _a.sent();
this.debug("MongoBinary: can't find system binary at " + systemBinary + ". " + err_1.message);
return [3 /*break*/, 4];
case 4: return [2 /*return*/, binaryPath];
}
});
});
};
MongoBinary.getCachePath = function (version) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.cache[version]];
});
});
};
MongoBinary.getDownloadPath = function (options) {
return __awaiter(this, void 0, void 0, function () {
var downloadDir, platform, arch, version, lockfile, downloader, _a, _b;
var _this = this;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
downloadDir = options.downloadDir, platform = options.platform, arch = options.arch, version = options.version;
// create downloadDir if not exists
return [4 /*yield*/, new Promise(function (resolve, reject) {
mkdirp_1.default(downloadDir, function (err) {
if (err)
reject(err);
else
resolve();
});
})];
case 1:
// create downloadDir if not exists
_c.sent();
lockfile = path_1.default.resolve(downloadDir, version + ".lock");
// wait lock
return [4 /*yield*/, new Promise(function (resolve, reject) {
lockfile_1.default.lock(lockfile, {
wait: 120000,
pollPeriod: 100,
stale: 110000,
retries: 3,
retryWait: 100,
}, function (err) {
if (err)
reject(err);
else
resolve();
});
})];
case 2:
// wait lock
_c.sent();
if (!!this.cache[version]) return [3 /*break*/, 4];
downloader = new MongoBinaryDownload_1.default({
downloadDir: downloadDir,
platform: platform,
arch: arch,
version: version,
});
downloader.debug = this.debug;
_a = this.cache;
_b = version;
return [4 /*yield*/, downloader.getMongodPath()];
case 3:
_a[_b] = _c.sent();
_c.label = 4;
case 4:
// remove lock
lockfile_1.default.unlock(lockfile, function (err) {
_this.debug(err
? "MongoBinary: Error when removing download lock " + err
: "MongoBinary: Download lock removed");
});
return [2 /*return*/, this.cache[version]];
}
});
});
};
MongoBinary.getPath = function (opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var legacyDLDir, defaultOptions, options, version, systemBinary, binaryPath, binaryVersion;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
legacyDLDir = path_1.default.resolve(os_1.default.homedir(), '.mongodb-binaries');
defaultOptions = {
downloadDir: process.env.MONGOMS_DOWNLOAD_DIR ||
(fs_1.default.existsSync(legacyDLDir)
? legacyDLDir
: path_1.default.resolve(find_cache_dir_1.default({
name: 'mongodb-memory-server',
// if we're in postinstall script, npm will set the cwd too deep
cwd: new RegExp("node_modules" + path_1.default.sep + "mongodb-memory-server$").test(process.cwd())
? path_1.default.resolve(process.cwd(), '..', '..')
: process.cwd(),
}) || '', 'mongodb-binaries')),
platform: process.env.MONGOMS_PLATFORM || os_1.default.platform(),
arch: process.env.MONGOMS_ARCH || os_1.default.arch(),
version: process.env.MONGOMS_VERSION || exports.LATEST_VERSION,
systemBinary: process.env.MONGOMS_SYSTEM_BINARY,
debug: typeof process.env.MONGOMS_DEBUG === 'string'
? ['1', 'on', 'yes', 'true'].indexOf(process.env.MONGOMS_DEBUG.toLowerCase()) !== -1
: false,
};
if (opts.debug) {
if (typeof opts.debug === 'function' && opts.debug.apply && opts.debug.call) {
this.debug = opts.debug;
}
else {
this.debug = console.log.bind(null);
}
}
else {
this.debug = function (msg) { }; // eslint-disable-line
}
options = __assign({}, defaultOptions, opts);
this.debug("MongoBinary options: " + JSON.stringify(options));
version = options.version, systemBinary = options.systemBinary;
binaryPath = '';
if (!systemBinary) return [3 /*break*/, 2];
return [4 /*yield*/, this.getSystemPath(systemBinary)];
case 1:
binaryPath = _a.sent();
if (binaryPath) {
if (~binaryPath.indexOf(' ')) {
binaryPath = "\"" + binaryPath + "\"";
}
binaryVersion = child_process_1.execSync(binaryPath + " --version")
.toString()
.split('\n')[0]
.split(' ')[2];
if (version !== exports.LATEST_VERSION && version !== binaryVersion) {
// we will log the version number of the system binary and the version requested so the user can see the difference
this.debug(dedent_1.default(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n MongoMemoryServer: Possible version conflict\n SystemBinary version: ", "\n Requested version: ", "\n\n Using SystemBinary!\n "], ["\n MongoMemoryServer: Possible version conflict\n SystemBinary version: ", "\n Requested version: ", "\n\n Using SystemBinary!\n "])), binaryVersion, version));
}
}
_a.label = 2;
case 2:
if (!!binaryPath) return [3 /*break*/, 4];
return [4 /*yield*/, this.getCachePath(version)];
case 3:
binaryPath = _a.sent();
_a.label = 4;
case 4:
if (!!binaryPath) return [3 /*break*/, 6];
return [4 /*yield*/, this.getDownloadPath(options)];
case 5:
binaryPath = _a.sent();
_a.label = 6;
case 6:
this.debug("MongoBinary: Mongod binary path: " + binaryPath);
return [2 /*return*/, binaryPath];
}
});
});
};
MongoBinary.hasValidBinPath = function (files) {
if (files.length === 1) {
return true;
}
else if (files.length > 1) {
return false;
}
return false;
};
MongoBinary.cache = {};
return MongoBinary;
}());
exports.default = MongoBinary;
var templateObject_1;
//# sourceMappingURL=MongoBinary.js.map
@@ -0,0 +1 @@
{"version":3,"file":"MongoBinary.js","sourceRoot":"","sources":["../../src/util/MongoBinary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
import { DebugFn, DebugPropT, DownloadProgressT } from '../types';
import HttpsProxyAgent from 'https-proxy-agent';
export interface MongoBinaryDownloadOpts {
version?: string;
downloadDir?: string;
platform?: string;
arch?: string;
debug?: DebugPropT;
checkMD5?: boolean;
}
interface HttpDownloadOptions {
hostname: string;
port: string;
path: string;
method: 'GET' | 'POST';
agent: HttpsProxyAgent | undefined;
}
export default class MongoBinaryDownload {
debug: DebugFn;
dlProgress: DownloadProgressT;
_downloadingUrl?: string;
checkMD5: boolean;
downloadDir: string;
arch: string;
version: string;
platform: string;
constructor({ platform, arch, downloadDir, version, checkMD5, debug }: MongoBinaryDownloadOpts);
getMongodPath(): Promise<string>;
startDownload(): Promise<string>;
makeMD5check(urlForReferenceMD5: string, mongoDBArchive: string): Promise<boolean | undefined>;
download(downloadUrl: string): Promise<string>;
extract(mongoDBArchive: string): Promise<string>;
httpDownload(httpOptions: HttpDownloadOptions, downloadLocation: string, tempDownloadLocation: string): Promise<string>;
printDownloadProgress(chunk: any): void;
locationExists(location: string): boolean;
}
export {};
//# sourceMappingURL=MongoBinaryDownload.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"MongoBinaryDownload.d.ts","sourceRoot":"","sources":["../../src/util/MongoBinaryDownload.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,iBAAiB,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;gBAEL,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,uBAAuB;IA8BxF,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBhC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAoBhC,YAAY,CAChB,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAezB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyC9C,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqChD,YAAY,CAChB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,MAAM,EACxB,oBAAoB,EAAE,MAAM,GAC3B,OAAO,CAAC,MAAM,CAAC;IA0ClB,qBAAqB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAkBvC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAS1C"}
@@ -0,0 +1,303 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var os_1 = __importDefault(require("os"));
var url_1 = __importDefault(require("url"));
var path_1 = __importDefault(require("path"));
var fs_1 = __importDefault(require("fs"));
var md5_file_1 = __importDefault(require("md5-file"));
var https_1 = __importDefault(require("https"));
var decompress_1 = __importDefault(require("decompress")); // 💩💩💩 this package does not work with Node@11+Jest+Babel
var MongoBinaryDownloadUrl_1 = __importDefault(require("./MongoBinaryDownloadUrl"));
var MongoBinary_1 = require("./MongoBinary");
var https_proxy_agent_1 = __importDefault(require("https-proxy-agent"));
var MongoBinaryDownload = /** @class */ (function () {
function MongoBinaryDownload(_a) {
var platform = _a.platform, arch = _a.arch, downloadDir = _a.downloadDir, version = _a.version, checkMD5 = _a.checkMD5, debug = _a.debug;
this.platform = platform || os_1.default.platform();
this.arch = arch || os_1.default.arch();
this.version = version || MongoBinary_1.LATEST_VERSION;
this.downloadDir = path_1.default.resolve(downloadDir || 'mongodb-download');
if (checkMD5 === undefined) {
this.checkMD5 =
typeof process.env.MONGOMS_MD5_CHECK === 'string' &&
['1', 'on', 'yes', 'true'].indexOf(process.env.MONGOMS_MD5_CHECK.toLowerCase()) !== -1;
}
else {
this.checkMD5 = checkMD5;
}
this.dlProgress = {
current: 0,
length: 0,
totalMb: 0,
lastPrintedAt: 0,
};
if (debug) {
if (typeof debug === 'function' && debug.apply && debug.call) {
this.debug = debug;
}
else {
this.debug = console.log.bind(null);
}
}
else {
this.debug = function () { };
}
}
MongoBinaryDownload.prototype.getMongodPath = function () {
return __awaiter(this, void 0, void 0, function () {
var binaryName, mongodPath, mongoDBArchive;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
binaryName = this.platform === 'win32' ? 'mongod.exe' : 'mongod';
mongodPath = path_1.default.resolve(this.downloadDir, this.version, binaryName);
if (this.locationExists(mongodPath)) {
return [2 /*return*/, mongodPath];
}
return [4 /*yield*/, this.startDownload()];
case 1:
mongoDBArchive = _a.sent();
return [4 /*yield*/, this.extract(mongoDBArchive)];
case 2:
_a.sent();
fs_1.default.unlinkSync(mongoDBArchive);
if (this.locationExists(mongodPath)) {
return [2 /*return*/, mongodPath];
}
throw new Error("Cannot find downloaded mongod binary by path " + mongodPath);
}
});
});
};
MongoBinaryDownload.prototype.startDownload = function () {
return __awaiter(this, void 0, void 0, function () {
var mbdUrl, downloadUrl, mongoDBArchive;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
mbdUrl = new MongoBinaryDownloadUrl_1.default({
platform: this.platform,
arch: this.arch,
version: this.version,
});
if (!fs_1.default.existsSync(this.downloadDir)) {
fs_1.default.mkdirSync(this.downloadDir);
}
return [4 /*yield*/, mbdUrl.getDownloadUrl()];
case 1:
downloadUrl = _a.sent();
this._downloadingUrl = downloadUrl;
return [4 /*yield*/, this.download(downloadUrl)];
case 2:
mongoDBArchive = _a.sent();
return [4 /*yield*/, this.makeMD5check(downloadUrl + ".md5", mongoDBArchive)];
case 3:
_a.sent();
return [2 /*return*/, mongoDBArchive];
}
});
});
};
MongoBinaryDownload.prototype.makeMD5check = function (urlForReferenceMD5, mongoDBArchive) {
return __awaiter(this, void 0, void 0, function () {
var mongoDBArchiveMd5, signatureContent, m, md5Remote, md5Local;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.checkMD5) {
return [2 /*return*/, undefined];
}
return [4 /*yield*/, this.download(urlForReferenceMD5)];
case 1:
mongoDBArchiveMd5 = _a.sent();
signatureContent = fs_1.default.readFileSync(mongoDBArchiveMd5).toString('UTF-8');
m = signatureContent.match(/(.*?)\s/);
md5Remote = m ? m[1] : null;
md5Local = md5_file_1.default.sync(mongoDBArchive);
if (md5Remote !== md5Local) {
throw new Error('MongoBinaryDownload: md5 check is failed');
}
return [2 /*return*/, true];
}
});
});
};
MongoBinaryDownload.prototype.download = function (downloadUrl) {
return __awaiter(this, void 0, void 0, function () {
var proxy, urlObject, downloadOptions, filename, downloadLocation, tempDownloadLocation, downloadedFile;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
proxy = process.env['yarn_https-proxy'] ||
process.env.yarn_proxy ||
process.env['npm_config_https-proxy'] ||
process.env.npm_config_proxy ||
process.env.https_proxy ||
process.env.http_proxy ||
process.env.HTTPS_PROXY ||
process.env.HTTP_PROXY;
urlObject = url_1.default.parse(downloadUrl);
if (!urlObject.hostname || !urlObject.path) {
throw new Error("Provided incorrect download url: " + downloadUrl);
}
downloadOptions = {
hostname: urlObject.hostname,
port: urlObject.port || '443',
path: urlObject.path,
method: 'GET',
agent: proxy ? new https_proxy_agent_1.default(proxy) : undefined,
};
filename = (urlObject.pathname || '').split('/').pop();
if (!filename) {
throw new Error("MongoBinaryDownload: missing filename for url " + downloadUrl);
}
downloadLocation = path_1.default.resolve(this.downloadDir, filename);
tempDownloadLocation = path_1.default.resolve(this.downloadDir, filename + ".downloading");
this.debug("Downloading" + (proxy ? " via proxy " + proxy : '') + ":", downloadUrl);
return [4 /*yield*/, this.httpDownload(downloadOptions, downloadLocation, tempDownloadLocation)];
case 1:
downloadedFile = _a.sent();
return [2 /*return*/, downloadedFile];
}
});
});
};
MongoBinaryDownload.prototype.extract = function (mongoDBArchive) {
return __awaiter(this, void 0, void 0, function () {
var binaryName, extractDir, filter;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
binaryName = this.platform === 'win32' ? 'mongod.exe' : 'mongod';
extractDir = path_1.default.resolve(this.downloadDir, this.version);
this.debug("extract(): " + extractDir);
if (!fs_1.default.existsSync(extractDir)) {
fs_1.default.mkdirSync(extractDir);
}
if (this.platform === 'win32') {
filter = function (file) {
return /bin\/mongod.exe$/.test(file.path) || /.dll$/.test(file.path);
};
}
else {
filter = function (file) { return /bin\/mongod$/.test(file.path); };
}
return [4 /*yield*/, decompress_1.default(mongoDBArchive, extractDir, {
// extract only `bin/mongod` file
filter: filter,
// extract to root folder
map: function (file) {
file.path = path_1.default.basename(file.path); // eslint-disable-line
return file;
},
})];
case 1:
_a.sent();
if (!this.locationExists(path_1.default.resolve(this.downloadDir, this.version, binaryName))) {
throw new Error("MongoBinaryDownload: missing mongod binary in " + mongoDBArchive + " (downloaded from " + (this
._downloadingUrl || '') + "). Broken package in MongoDB distro?");
}
return [2 /*return*/, extractDir];
}
});
});
};
MongoBinaryDownload.prototype.httpDownload = function (httpOptions, downloadLocation, tempDownloadLocation) {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve, reject) {
var fileStream = fs_1.default.createWriteStream(tempDownloadLocation);
var req = https_1.default.get(httpOptions, function (response) {
_this.dlProgress.current = 0;
_this.dlProgress.length = parseInt(response.headers['content-length'], 10);
_this.dlProgress.totalMb = Math.round((_this.dlProgress.length / 1048576) * 10) / 10;
response.pipe(fileStream);
fileStream.on('finish', function () {
if (_this.dlProgress.current < 1000000 && !httpOptions.path.endsWith('.md5')) {
var downloadUrl = _this._downloadingUrl || "https://" + httpOptions.hostname + "/" + httpOptions.path;
reject(new Error("Too small (" + _this.dlProgress.current + " bytes) mongod binary downloaded from " + downloadUrl));
return;
}
fileStream.close();
fs_1.default.renameSync(tempDownloadLocation, downloadLocation);
_this.debug("renamed " + tempDownloadLocation + " to " + downloadLocation);
resolve(downloadLocation);
});
response.on('data', function (chunk) {
_this.printDownloadProgress(chunk);
});
req.on('error', function (e) {
_this.debug('request error:', e);
reject(e);
});
});
})];
});
});
};
MongoBinaryDownload.prototype.printDownloadProgress = function (chunk) {
this.dlProgress.current += chunk.length;
var now = Date.now();
if (now - this.dlProgress.lastPrintedAt < 2000)
return;
this.dlProgress.lastPrintedAt = now;
var percentComplete = Math.round(((100.0 * this.dlProgress.current) / this.dlProgress.length) * 10) / 10;
var mbComplete = Math.round((this.dlProgress.current / 1048576) * 10) / 10;
var crReturn = this.platform === 'win32' ? '\x1b[0G' : '\r';
process.stdout.write("Downloading MongoDB " + this.version + ": " + percentComplete + " % (" + mbComplete + "mb " +
("/ " + this.dlProgress.totalMb + "mb)" + crReturn));
};
MongoBinaryDownload.prototype.locationExists = function (location) {
try {
fs_1.default.lstatSync(location);
return true;
}
catch (e) {
if (e.code !== 'ENOENT')
throw e;
return false;
}
};
return MongoBinaryDownload;
}());
exports.default = MongoBinaryDownload;
//# sourceMappingURL=MongoBinaryDownload.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,32 @@
import getos from 'getos';
export interface MongoBinaryDownloadUrlOpts {
version: string;
platform: string;
arch: string;
os?: getos.Os;
}
export default class MongoBinaryDownloadUrl {
platform: string;
arch: string;
version: string;
os: getos.Os | undefined;
constructor({ platform, arch, version, os }: MongoBinaryDownloadUrlOpts);
getDownloadUrl(): Promise<string>;
getArchiveName(): Promise<string>;
getArchiveNameWin(): Promise<string>;
getArchiveNameOsx(): Promise<string>;
getArchiveNameLinux(): Promise<string>;
getos(): Promise<getos.Os>;
getLinuxOSVersionString(os: getos.LinuxOs): string;
getDebianVersionString(os: getos.Os): string;
getFedoraVersionString(os: getos.Os): string;
getRhelVersionString(os: getos.Os): string;
getElementaryOSVersionString(os: getos.Os): string;
getMintVersionString(os: getos.Os): string;
getLegacyVersionString(os: getos.Os): string;
getSuseVersionString(os: getos.Os): string;
getUbuntuVersionString(os: getos.LinuxOs): string;
translatePlatform(platform: string): string;
translateArch(arch: string, mongoPlatform: string): string;
}
//# sourceMappingURL=MongoBinaryDownloadUrl.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"MongoBinaryDownloadUrl.d.ts","sourceRoot":"","sources":["../../src/util/MongoBinaryDownloadUrl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CACf;AAED,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC;gBAEb,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,0BAA0B;IAOjE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAOjC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAajC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IASpC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBpC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBtC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IAShC,uBAAuB,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM;IAoBlD,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAa5C,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAa5C,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAgB1C,4BAA4B,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAKlD,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAM1C,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAI5C,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM;IAS1C,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM;IAiCjD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiB3C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;CAc3D"}
@@ -0,0 +1,315 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var getos_1 = __importDefault(require("getos"));
var MongoBinaryDownloadUrl = /** @class */ (function () {
function MongoBinaryDownloadUrl(_a) {
var platform = _a.platform, arch = _a.arch, version = _a.version, os = _a.os;
this.version = version;
this.platform = this.translatePlatform(platform);
this.arch = this.translateArch(arch, this.platform);
this.os = os;
}
MongoBinaryDownloadUrl.prototype.getDownloadUrl = function () {
return __awaiter(this, void 0, void 0, function () {
var archive;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.getArchiveName()];
case 1:
archive = _a.sent();
return [2 /*return*/, (process.env.MONGOMS_DOWNLOAD_MIRROR || 'https://fastdl.mongodb.org') + "/" + this.platform + "/" + archive];
}
});
});
};
MongoBinaryDownloadUrl.prototype.getArchiveName = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (this.platform) {
case 'osx':
return [2 /*return*/, this.getArchiveNameOsx()];
case 'win32':
return [2 /*return*/, this.getArchiveNameWin()];
case 'linux':
default:
return [2 /*return*/, this.getArchiveNameLinux()];
}
return [2 /*return*/];
});
});
};
// https://www.mongodb.org/dl/win32
MongoBinaryDownloadUrl.prototype.getArchiveNameWin = function () {
return __awaiter(this, void 0, void 0, function () {
var name;
return __generator(this, function (_a) {
name = "mongodb-" + this.platform;
name += "-" + this.arch;
name += '-2008plus-ssl';
name += "-" + this.version + ".zip";
return [2 /*return*/, name];
});
});
};
// https://www.mongodb.org/dl/osx
MongoBinaryDownloadUrl.prototype.getArchiveNameOsx = function () {
return __awaiter(this, void 0, void 0, function () {
var name;
return __generator(this, function (_a) {
name = "mongodb-osx";
if (!(this.version.indexOf('3.0') === 0 ||
this.version.indexOf('2.') === 0 ||
this.version.indexOf('1.') === 0)) {
name += '-ssl';
}
name += "-" + this.arch;
name += "-" + this.version + ".tgz";
return [2 /*return*/, name];
});
});
};
// https://www.mongodb.org/dl/linux
MongoBinaryDownloadUrl.prototype.getArchiveNameLinux = function () {
return __awaiter(this, void 0, void 0, function () {
var name, osString, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
name = "mongodb-linux";
name += "-" + this.arch;
if (!(this.arch !== 'i686')) return [3 /*break*/, 3];
if (!!this.os) return [3 /*break*/, 2];
_a = this;
return [4 /*yield*/, this.getos()];
case 1:
_a.os = _b.sent();
_b.label = 2;
case 2:
osString = this.getLinuxOSVersionString(this.os);
_b.label = 3;
case 3:
if (osString) {
name += "-" + osString;
}
name += "-" + this.version + ".tgz";
return [2 /*return*/, name];
}
});
});
};
MongoBinaryDownloadUrl.prototype.getos = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve, reject) {
getos_1.default(function (e, os) {
if (e)
reject(e);
resolve(os);
});
})];
});
});
};
MongoBinaryDownloadUrl.prototype.getLinuxOSVersionString = function (os) {
if (/ubuntu/i.test(os.dist)) {
return this.getUbuntuVersionString(os);
}
else if (/elementary OS/i.test(os.dist)) {
return this.getElementaryOSVersionString(os);
}
else if (/suse/i.test(os.dist)) {
return this.getSuseVersionString(os);
}
else if (/rhel/i.test(os.dist) || /centos/i.test(os.dist) || /scientific/i.test(os.dist)) {
return this.getRhelVersionString(os);
}
else if (/fedora/i.test(os.dist)) {
return this.getFedoraVersionString(os);
}
else if (/debian/i.test(os.dist)) {
return this.getDebianVersionString(os);
}
else if (/mint/i.test(os.dist)) {
return this.getMintVersionString(os);
}
console.warn("Unknown linux distro " + os.dist + ", falling back to legacy MongoDB build");
return this.getLegacyVersionString(os);
};
MongoBinaryDownloadUrl.prototype.getDebianVersionString = function (os) {
var name = 'debian';
var release = parseFloat(os.release);
if (release >= 9 || os.release === 'unstable') {
name += '92';
}
else if (release >= 8.1) {
name += '81';
}
else if (release >= 7.1) {
name += '71';
}
return name;
};
MongoBinaryDownloadUrl.prototype.getFedoraVersionString = function (os) {
var name = 'rhel';
var fedoraVer = parseInt(os.release, 10);
if (fedoraVer > 18) {
name += '70';
}
else if (fedoraVer < 19 && fedoraVer >= 12) {
name += '62';
}
else if (fedoraVer < 12 && fedoraVer >= 6) {
name += '55';
}
return name;
};
MongoBinaryDownloadUrl.prototype.getRhelVersionString = function (os) {
var name = 'rhel';
var release = os.release;
if (release) {
if (/^7/.test(release)) {
name += '70';
}
else if (/^6/.test(release)) {
name += '62';
}
else if (/^5/.test(release)) {
name += '55';
}
}
return name;
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
MongoBinaryDownloadUrl.prototype.getElementaryOSVersionString = function (os) {
return 'ubuntu1404';
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
MongoBinaryDownloadUrl.prototype.getMintVersionString = function (os) {
// unfortunately getos doesn't return version for Mint
return 'ubuntu1404';
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
MongoBinaryDownloadUrl.prototype.getLegacyVersionString = function (os) {
return '';
};
MongoBinaryDownloadUrl.prototype.getSuseVersionString = function (os) {
var releaseMatch = os.release.match(/(^11|^12)/);
if (releaseMatch) {
return "suse" + releaseMatch[0];
}
return '';
};
MongoBinaryDownloadUrl.prototype.getUbuntuVersionString = function (os) {
var name = 'ubuntu';
var ubuntuVer = os.release ? os.release.split('.') : [];
var majorVer = parseInt(ubuntuVer[0], 10);
// const minorVer: string = ubuntuVer[1];
if (os.release === '12.04') {
name += '1204';
}
else if (os.release === '14.04') {
name += '1404';
}
else if (os.release === '14.10') {
name += '1410-clang';
}
else if (majorVer === 14) {
name += '1404';
}
else if (os.release === '16.04') {
name += '1604';
}
else if (majorVer === 16) {
name += '1604';
}
else if (majorVer === 18) {
if (this.version && this.version.indexOf('3.') === 0) {
// For MongoDB 3.x using 1604 binaries, download distro does not have builds for Ubuntu 1804
// https://www.mongodb.org/dl/linux/x86_64-ubuntu1604
name += '1604';
}
else {
// See fulllist of versions https://www.mongodb.org/dl/linux/x86_64-ubuntu1804
name += '1804';
}
}
else {
name += '1404';
}
return name;
};
MongoBinaryDownloadUrl.prototype.translatePlatform = function (platform) {
switch (platform) {
case 'darwin':
return 'osx';
case 'win32':
return 'win32';
case 'linux':
return 'linux';
case 'elementary OS':
return 'linux';
case 'sunos':
return 'sunos5';
default:
throw new Error("unsupported OS " + platform);
}
};
MongoBinaryDownloadUrl.prototype.translateArch = function (arch, mongoPlatform) {
if (arch === 'ia32') {
if (mongoPlatform === 'linux') {
return 'i686';
}
else if (mongoPlatform === 'win32') {
return 'i386';
}
throw new Error('unsupported architecture');
}
else if (arch === 'x64') {
return 'x86_64';
}
else {
throw new Error('unsupported architecture, ia32 and x64 are the only valid options');
}
};
return MongoBinaryDownloadUrl;
}());
exports.default = MongoBinaryDownloadUrl;
//# sourceMappingURL=MongoBinaryDownloadUrl.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,42 @@
/// <reference types="node" />
import { ChildProcess } from 'child_process';
import { MongoBinaryOpts } from './MongoBinary';
import { DebugPropT, StorageEngineT, SpawnOptions } from '../types';
export interface MongodOps {
instance: {
port?: number;
ip?: string;
storageEngine?: StorageEngineT;
dbPath?: string;
debug?: DebugPropT;
replSet?: string;
args?: string[];
auth?: boolean;
};
binary?: MongoBinaryOpts;
spawn?: SpawnOptions;
debug?: DebugPropT;
}
export default class MongoInstance {
static childProcessList: ChildProcess[];
opts: MongodOps;
debug: Function;
childProcess: ChildProcess | null;
killerProcess: ChildProcess | null;
instanceReady: Function;
instanceFailed: Function;
isInstanceReady: boolean;
constructor(opts: MongodOps);
static run(opts: MongodOps): Promise<MongoInstance>;
prepareCommandArgs(): string[];
run(): Promise<MongoInstance>;
kill(): Promise<MongoInstance>;
getPid(): number | undefined;
_launchMongod(mongoBin: string): ChildProcess;
_launchKiller(parentPid: number, childPid: number): ChildProcess;
errorHandler(err: string): void;
closeHandler(code: number): void;
stderrHandler(message: string | Buffer): void;
stdoutHandler(message: string | Buffer): void;
}
//# sourceMappingURL=MongoInstance.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"MongoInstance.d.ts","sourceRoot":"","sources":["../../src/util/MongoInstance.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAC;AAGlE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,WAAW,SAAS;IAExB,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,aAAa,CAAC,EAAE,cAAc,CAAC;QAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IAGF,MAAM,CAAC,EAAE,eAAe,CAAC;IAGzB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,MAAM,CAAC,gBAAgB,EAAE,YAAY,EAAE,CAAM;IAC7C,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAEhB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IAEnC,aAAa,EAAE,QAAQ,CAAC;IAExB,cAAc,EAAE,QAAQ,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;gBAEb,IAAI,EAAE,SAAS;IAmC3B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAKnD,kBAAkB,IAAI,MAAM,EAAE;IAexB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;IAsB7B,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAiCpC,MAAM,IAAI,MAAM,GAAG,SAAS;IAI5B,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IAgB7C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY;IAsBhE,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAuB9C"}
@@ -0,0 +1,270 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var child_process_1 = require("child_process");
var path_1 = __importDefault(require("path"));
var MongoBinary_1 = __importDefault(require("./MongoBinary"));
var MongoInstance = /** @class */ (function () {
function MongoInstance(opts) {
this.opts = opts;
this.isInstanceReady = false;
this.childProcess = null;
this.killerProcess = null;
if (this.opts.debug) {
if (!this.opts.instance)
this.opts.instance = {};
if (!this.opts.binary)
this.opts.binary = {};
this.opts.instance.debug = this.opts.debug;
this.opts.binary.debug = this.opts.debug;
}
if (this.opts.instance && this.opts.instance.debug) {
if (typeof this.opts.instance.debug === 'function' &&
this.opts.instance.debug.apply &&
this.opts.instance.debug.call) {
this.debug = this.opts.instance.debug;
}
else {
this.debug = console.log.bind(null);
}
}
else {
this.debug = function () { };
}
// add instance's port to debug output
var debugFn = this.debug;
var port = this.opts.instance && this.opts.instance.port;
this.debug = function (msg) {
debugFn("Mongo[" + port + "]: " + msg);
};
}
MongoInstance.run = function (opts) {
var instance = new this(opts);
return instance.run();
};
MongoInstance.prototype.prepareCommandArgs = function () {
var _a = this.opts.instance, ip = _a.ip, port = _a.port, storageEngine = _a.storageEngine, dbPath = _a.dbPath, replSet = _a.replSet, auth = _a.auth, args = _a.args;
var result = [];
result.push('--bind_ip', ip || '127.0.0.1');
if (port)
result.push('--port', port.toString());
if (storageEngine)
result.push('--storageEngine', storageEngine);
if (dbPath)
result.push('--dbpath', dbPath);
if (!auth)
result.push('--noauth');
else if (auth)
result.push('--auth');
if (replSet)
result.push('--replSet', replSet);
return result.concat(args || []);
};
MongoInstance.prototype.run = function () {
return __awaiter(this, void 0, void 0, function () {
var launch, mongoBin;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
launch = new Promise(function (resolve, reject) {
_this.instanceReady = function () {
_this.isInstanceReady = true;
_this.debug('MongodbInstance: is ready!');
resolve(__assign({}, _this.childProcess));
};
_this.instanceFailed = function (err) {
_this.debug("MongodbInstance: is failed: " + err.toString());
if (_this.killerProcess)
_this.killerProcess.kill();
reject(err);
};
});
return [4 /*yield*/, MongoBinary_1.default.getPath(this.opts.binary)];
case 1:
mongoBin = _a.sent();
this.childProcess = this._launchMongod(mongoBin);
this.killerProcess = this._launchKiller(process.pid, this.childProcess.pid);
return [4 /*yield*/, launch];
case 2:
_a.sent();
return [2 /*return*/, this];
}
});
});
};
MongoInstance.prototype.kill = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.debug('Called MongoInstance.kill():');
if (!(this.childProcess && !this.childProcess.killed)) return [3 /*break*/, 2];
return [4 /*yield*/, new Promise(function (resolve) {
if (_this.childProcess) {
_this.childProcess.once("exit", function () {
_this.debug(' - childProcess: got exit signal. Ok!');
resolve();
});
_this.childProcess.kill();
_this.debug(' - childProcess: send kill cmd...');
}
})];
case 1:
_a.sent();
return [3 /*break*/, 3];
case 2:
this.debug(' - childProcess: nothing to kill, skipping.');
_a.label = 3;
case 3:
if (!(this.killerProcess && !this.killerProcess.killed)) return [3 /*break*/, 5];
return [4 /*yield*/, new Promise(function (resolve) {
if (_this.killerProcess) {
_this.killerProcess.once("exit", function () {
_this.debug(' - killerProcess: got exit signal. Ok!');
resolve();
});
_this.killerProcess.kill();
_this.debug(' - killerProcess: send kill cmd...');
}
})];
case 4:
_a.sent();
return [3 /*break*/, 6];
case 5:
this.debug(' - killerProcess: nothing to kill, skipping.');
_a.label = 6;
case 6: return [2 /*return*/, this];
}
});
});
};
MongoInstance.prototype.getPid = function () {
return this.childProcess ? this.childProcess.pid : undefined;
};
MongoInstance.prototype._launchMongod = function (mongoBin) {
var spawnOpts = this.opts.spawn || {};
if (!spawnOpts.stdio)
spawnOpts.stdio = 'pipe';
var childProcess = child_process_1.spawn(mongoBin, this.prepareCommandArgs(), spawnOpts);
if (childProcess.stderr) {
childProcess.stderr.on('data', this.stderrHandler.bind(this));
}
if (childProcess.stdout) {
childProcess.stdout.on('data', this.stdoutHandler.bind(this));
}
childProcess.on('close', this.closeHandler.bind(this));
childProcess.on('error', this.errorHandler.bind(this));
return childProcess;
};
MongoInstance.prototype._launchKiller = function (parentPid, childPid) {
var _this = this;
this.debug("Called MongoInstance._launchKiller(parent: " + parentPid + ", child: " + childPid + "):");
// spawn process which kills itself and mongo process if current process is dead
var killer = child_process_1.spawn(process.argv[0], [
path_1.default.resolve(__dirname, '../../scripts/mongo_killer.js'),
parentPid.toString(),
childPid.toString(),
], { stdio: 'pipe' });
['exit', 'message', 'disconnect', 'error'].forEach(function (e) {
killer.on(e, function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
_this.debug("[MongoKiller]: " + e + " - " + JSON.stringify(args));
});
});
return killer;
};
MongoInstance.prototype.errorHandler = function (err) {
this.instanceFailed(err);
};
MongoInstance.prototype.closeHandler = function (code) {
this.debug("CLOSE: " + code);
};
MongoInstance.prototype.stderrHandler = function (message) {
this.debug("STDERR: " + message.toString());
};
MongoInstance.prototype.stdoutHandler = function (message) {
this.debug("" + message.toString());
var log = message.toString();
if (/waiting for connections on port/i.test(log)) {
this.instanceReady();
}
else if (/addr already in use/i.test(log)) {
this.instanceFailed("Port " + this.opts.instance.port + " already in use");
}
else if (/mongod instance already running/i.test(log)) {
this.instanceFailed('Mongod already running');
}
else if (/permission denied/i.test(log)) {
this.instanceFailed('Mongod permission denied');
}
else if (/Data directory .*? not found/i.test(log)) {
this.instanceFailed('Data directory not found');
}
else if (/shutting down with code/i.test(log)) {
// if mongod started succesfully then no error on shutdown!
if (!this.isInstanceReady) {
this.instanceFailed('Mongod shutting down');
}
}
else if (/\*\*\*aborting after/i.test(log)) {
this.instanceFailed('Mongod internal error');
}
};
MongoInstance.childProcessList = [];
return MongoInstance;
}());
exports.default = MongoInstance;
//# sourceMappingURL=MongoInstance.js.map
File diff suppressed because one or more lines are too long
+19
View File
@@ -0,0 +1,19 @@
import { ReplStatusResultT } from '../types';
import { Db } from 'mongodb';
/**
* Returns a database name string.
* @param {string} dbName
*/
export declare function generateDbName(dbName?: string): string;
/**
* Extracts the host and port information from a mongodb URI string.
* @param {string} uri mongodb URI
*/
export declare function getHost(uri: string): string;
/**
* Returns replica set status result.
* @param {any} db db instance
*/
export declare function getReplStatus(db: Db): Promise<ReplStatusResultT>;
export default generateDbName;
//# sourceMappingURL=db_util.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"db_util.d.ts","sourceRoot":"","sources":["../../src/util/db_util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAGtE;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,77 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var v4_1 = __importDefault(require("uuid/v4"));
/**
* Returns a database name string.
* @param {string} dbName
*/
function generateDbName(dbName) {
return dbName || v4_1.default();
}
exports.generateDbName = generateDbName;
/**
* Extracts the host and port information from a mongodb URI string.
* @param {string} uri mongodb URI
*/
function getHost(uri) {
return uri.replace('mongodb://', '').replace(/\/.*/, '');
}
exports.getHost = getHost;
/**
* Returns replica set status result.
* @param {any} db db instance
*/
function getReplStatus(db) {
return __awaiter(this, void 0, void 0, function () {
var status;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, db.command({ replSetGetStatus: 1 })];
case 1:
status = _a.sent();
return [2 /*return*/, status];
}
});
});
}
exports.getReplStatus = getReplStatus;
exports.default = generateDbName;
//# sourceMappingURL=db_util.js.map
@@ -0,0 +1 @@
{"version":3,"file":"db_util.js","sourceRoot":"","sources":["../../src/util/db_util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA2B;AAG3B;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAAe;IAC5C,OAAO,MAAM,IAAI,YAAI,EAAE,CAAC;AAC1B,CAAC;AAFD,wCAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAsB,aAAa,CAAC,EAAM;;;;;wBACzB,qBAAM,EAAE,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAA;;oBAAlD,MAAM,GAAG,SAAyC;oBACxD,sBAAO,MAAM,EAAC;;;;CACf;AAHD,sCAGC;AAED,kBAAe,cAAc,CAAC"}
@@ -0,0 +1,2 @@
export declare function deprecate(msg: string): void;
//# sourceMappingURL=deprecate.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"deprecate.d.ts","sourceRoot":"","sources":["../../src/util/deprecate.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAY3C"}
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function deprecate(msg) {
var stack;
var stackStr = '';
var error = new Error();
if (error.stack) {
stack = error.stack.replace(/^\s+at\s+/gm, '').split('\n');
stackStr = "\n " + stack.slice(2, 7).join('\n ');
}
// eslint-disable-next-line
console.log("[mongodb-memory-server]: DEPRECATION MESSAGE: " + msg + " " + stackStr + "\n\n");
}
exports.deprecate = deprecate;
//# sourceMappingURL=deprecate.js.map
@@ -0,0 +1 @@
{"version":3,"file":"deprecate.js","sourceRoot":"","sources":["../../src/util/deprecate.ts"],"names":[],"mappings":";;AAAA,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,KAAK,CAAC;IACV,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAE1B,IAAI,KAAK,CAAC,KAAK,EAAE;QACf,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,QAAQ,GAAG,WAAS,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAG,CAAC;KACxD;IAED,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,mDAAiD,GAAG,SAAI,QAAQ,SAAM,CAAC,CAAC;AACtF,CAAC;AAZD,8BAYC"}
@@ -0,0 +1,90 @@
{
"name": "mongodb-memory-server",
"version": "0.0.0-development",
"description": "In-memory MongoDB Server. Designed with testing in mind, the server will allow you to connect your favourite ODM or client library to the MongoDB Server and run integration tests isolated from each other.",
"main": "lib/index",
"types": "lib/index.d.ts",
"repository": "https://github.com/nodkz/mongodb-memory-server",
"files": [
"lib",
"scripts"
],
"keywords": [
"mongodb",
"mongoose",
"mock",
"stub",
"mockgoose",
"mongodb-prebuilt",
"mongomem"
],
"license": "MIT",
"bugs": {
"url": "https://github.com/nodkz/mongodb-memory-server/issues"
},
"homepage": "https://github.com/nodkz/mongodb-memory-server",
"devDependencies": {
"@types/decompress": "^4.2.3",
"@types/dedent": "^0.7.0",
"@types/find-cache-dir": "^2.0.0",
"@types/get-port": "^4.0.1",
"@types/getos": "^3.0.0",
"@types/jest": "^24.0.11",
"@types/lockfile": "^1.0.1",
"@types/md5-file": "^4.0.0",
"@types/mkdirp": "^0.5.2",
"@types/mongodb": "^3.1.22",
"@types/node": "^11.11.0",
"@types/tmp": "0.0.34",
"@types/uuid": "^3.4.4",
"@typescript-eslint/eslint-plugin": "^1.4.2",
"cross-env": "^5.2.0",
"cz-conventional-changelog": "^2.1.0",
"eslint": "^5.15.1",
"eslint-config-prettier": "^4.1.0",
"eslint-plugin-prettier": "^3.0.1",
"flowgen": "^1.7.0",
"jest": "^24.3.1",
"mongodb": "^3.1.13",
"npm-run-all": "^4.1.5",
"prettier": "^1.16.4",
"rimraf": "^2.6.3",
"semantic-release": "^15.13.3",
"ts-jest": "^24.0.0",
"typescript": "^3.3.3333"
},
"dependencies": {
"debug": "^4.1.1",
"decompress": "^4.2.0",
"dedent": "^0.7.0",
"find-cache-dir": "^2.0.0",
"get-port": "^4.2.0",
"getos": "^3.1.1",
"https-proxy-agent": "^2.2.1",
"lockfile": "^1.0.4",
"md5-file": "^4.0.0",
"mkdirp": "^0.5.1",
"tmp": "^0.0.33",
"uuid": "^3.2.1"
},
"peerDependencies": {
"mongodb": ">= 3.0"
},
"scripts": {
"build": "npm-run-all build:*",
"build:ts": "rimraf ./lib && tsc -p ./tsconfig.build.json",
"disabled-build:flow": "find ./lib -name \"*.d.ts\" -exec bash -c './node_modules/.bin/flowgen --add-flow-header \"$1\" -o \"${1%.d.ts}\".js.flow' - '{}' \\;",
"watch": "cross-env MONGOMS_DOWNLOAD_DIR=./tmp jest --watch",
"coverage": "cross-env MONGOMS_DOWNLOAD_DIR=./tmp jest --coverage",
"lint": "eslint 'src/**/*.{js,ts}'",
"test": "npm run lint && npm run tscheck && npm run coverage",
"tscheck": "tsc --noEmit",
"semantic-release": "semantic-release",
"postinstall": "node ./scripts/postinstall.js"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
}
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
"noEmit": false,
"target": "es5",
"module": "commonjs",
"sourceMap": true,
"declaration": true,
"declarationMap": true,
"skipLibCheck": false
},
"include": ["src/**/*"],
"exclude": ["**/__tests__"]
}
+4 -12
View File
@@ -1,16 +1,8 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
"noEmit": false,
"target": "es5",
"module": "commonjs",
"sourceMap": true,
"declaration": true,
"declarationMap": true,
"skipLibCheck": false
"composite": true
},
"include": ["src/**/*"],
"exclude": ["**/__tests__"]
"files": [],
"include": [],
"references": [{ "path": "./packages/mongodb-memory-server" }]
}
+1535 -28
View File
File diff suppressed because it is too large Load Diff