mongodb-runner 4.10.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -230
- package/bin/runner.js +3 -0
- package/dist/.esm-wrapper.mjs +5 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +180 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mongocluster.d.ts +30 -0
- package/dist/mongocluster.d.ts.map +1 -0
- package/dist/mongocluster.js +179 -0
- package/dist/mongocluster.js.map +1 -0
- package/dist/mongologreader.d.ts +18 -0
- package/dist/mongologreader.d.ts.map +1 -0
- package/dist/mongologreader.js +89 -0
- package/dist/mongologreader.js.map +1 -0
- package/dist/mongoserver.d.ts +31 -0
- package/dist/mongoserver.d.ts.map +1 -0
- package/dist/mongoserver.js +235 -0
- package/dist/mongoserver.js.map +1 -0
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +16 -0
- package/dist/util.js.map +1 -0
- package/package.json +66 -53
- package/appveyor.yml +0 -39
- package/bin/mongodb-runner-worker.js +0 -46
- package/bin/mongodb-runner.js +0 -56
- package/index.js +0 -1
- package/lib/index.js +0 -495
- package/lib/worker.js +0 -336
- package/mocha/after.js +0 -45
- package/mocha/before.js +0 -75
- package/usage.txt +0 -50
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoCluster = void 0;
|
|
4
|
+
const mongoserver_1 = require("./mongoserver");
|
|
5
|
+
const mongodb_downloader_1 = require("@mongodb-js/mongodb-downloader");
|
|
6
|
+
const mongodb_1 = require("mongodb");
|
|
7
|
+
const util_1 = require("./util");
|
|
8
|
+
class MongoCluster {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.topology = 'standalone';
|
|
11
|
+
this.servers = [];
|
|
12
|
+
this.shards = [];
|
|
13
|
+
}
|
|
14
|
+
serialize() {
|
|
15
|
+
return {
|
|
16
|
+
topology: this.topology,
|
|
17
|
+
replSetName: this.replSetName,
|
|
18
|
+
servers: this.servers.map((srv) => srv.serialize()),
|
|
19
|
+
shards: this.shards.map((shard) => shard.serialize()),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static async deserialize(serialized) {
|
|
23
|
+
const cluster = new MongoCluster();
|
|
24
|
+
cluster.topology = serialized.topology;
|
|
25
|
+
cluster.replSetName = serialized.replSetName;
|
|
26
|
+
cluster.servers = await Promise.all(serialized.servers.map((srv) => mongoserver_1.MongoServer.deserialize(srv)));
|
|
27
|
+
cluster.shards = await Promise.all(serialized.shards.map((shard) => MongoCluster.deserialize(shard)));
|
|
28
|
+
return cluster;
|
|
29
|
+
}
|
|
30
|
+
get hostport() {
|
|
31
|
+
return this.servers.map((srv) => srv.hostport).join(',');
|
|
32
|
+
}
|
|
33
|
+
get connectionString() {
|
|
34
|
+
return `mongodb://${this.hostport}/${this.replSetName ? `?replicaSet=${this.replSetName}` : ''}`;
|
|
35
|
+
}
|
|
36
|
+
get serverVersion() {
|
|
37
|
+
return this.servers[0].serverVersion;
|
|
38
|
+
}
|
|
39
|
+
get serverVariant() {
|
|
40
|
+
return this.servers[0].serverVariant;
|
|
41
|
+
}
|
|
42
|
+
static async start({ ...options }) {
|
|
43
|
+
var _a, _b, _c;
|
|
44
|
+
const cluster = new MongoCluster();
|
|
45
|
+
cluster.topology = options.topology;
|
|
46
|
+
if (!options.binDir) {
|
|
47
|
+
options.binDir = await (0, mongodb_downloader_1.downloadMongoDb)(options.tmpDir, options.version, options.downloadOptions);
|
|
48
|
+
}
|
|
49
|
+
if (options.topology === 'standalone') {
|
|
50
|
+
cluster.servers.push(await mongoserver_1.MongoServer.start({
|
|
51
|
+
...options,
|
|
52
|
+
binary: 'mongod',
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
else if (options.topology === 'replset') {
|
|
56
|
+
const { secondaries = 2, arbiters = 0 } = options;
|
|
57
|
+
const args = [...((_a = options.args) !== null && _a !== void 0 ? _a : [])];
|
|
58
|
+
let replSetName;
|
|
59
|
+
if (!args.includes('--replSet')) {
|
|
60
|
+
replSetName = `replSet-${(0, util_1.uuid)()}`;
|
|
61
|
+
args.push('--replSet', replSetName);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
replSetName = args[args.indexOf('--replSet') + 1];
|
|
65
|
+
}
|
|
66
|
+
const primaryArgs = [...args];
|
|
67
|
+
(0, util_1.debug)('Starting primary', primaryArgs);
|
|
68
|
+
const primary = await mongoserver_1.MongoServer.start({
|
|
69
|
+
...options,
|
|
70
|
+
args: primaryArgs,
|
|
71
|
+
binary: 'mongod',
|
|
72
|
+
});
|
|
73
|
+
cluster.servers.push(primary);
|
|
74
|
+
if (args.includes('--port')) {
|
|
75
|
+
args.splice(args.indexOf('--port') + 1, 1, '0');
|
|
76
|
+
}
|
|
77
|
+
(0, util_1.debug)('Starting secondaries and arbiters', {
|
|
78
|
+
secondaries,
|
|
79
|
+
arbiters,
|
|
80
|
+
args,
|
|
81
|
+
});
|
|
82
|
+
cluster.servers.push(...(await Promise.all((0, util_1.range)(secondaries + arbiters).map(() => mongoserver_1.MongoServer.start({
|
|
83
|
+
...options,
|
|
84
|
+
args,
|
|
85
|
+
binary: 'mongod',
|
|
86
|
+
})))));
|
|
87
|
+
await primary.withClient(async (client) => {
|
|
88
|
+
(0, util_1.debug)('Running rs.initiate');
|
|
89
|
+
const rsConf = {
|
|
90
|
+
_id: replSetName,
|
|
91
|
+
configsvr: args.includes('--configsvr'),
|
|
92
|
+
members: cluster.servers.map((srv, i) => {
|
|
93
|
+
return {
|
|
94
|
+
_id: i,
|
|
95
|
+
host: srv.hostport,
|
|
96
|
+
arbiterOnly: i > 1 + secondaries,
|
|
97
|
+
priority: i === 0 ? 1 : 0,
|
|
98
|
+
};
|
|
99
|
+
}),
|
|
100
|
+
};
|
|
101
|
+
await client.db('admin').command({
|
|
102
|
+
replSetInitiate: rsConf,
|
|
103
|
+
});
|
|
104
|
+
for (let i = 0; i < 60; i++) {
|
|
105
|
+
const status = await client.db('admin').command({
|
|
106
|
+
replSetGetStatus: 1,
|
|
107
|
+
});
|
|
108
|
+
if (status.members.some((member) => member.stateStr === 'PRIMARY')) {
|
|
109
|
+
(0, util_1.debug)('rs.status indicated primary for replset', status.set);
|
|
110
|
+
cluster.replSetName = status.set;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
(0, util_1.debug)('rs.status did not include primary, waiting...');
|
|
114
|
+
await (0, util_1.sleep)(1000);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else if (options.topology === 'sharded') {
|
|
119
|
+
const { shards = 3 } = options;
|
|
120
|
+
const shardArgs = [...((_b = options.args) !== null && _b !== void 0 ? _b : [])];
|
|
121
|
+
if (shardArgs.includes('--port')) {
|
|
122
|
+
shardArgs.splice(shardArgs.indexOf('--port') + 1, 1, '0');
|
|
123
|
+
}
|
|
124
|
+
(0, util_1.debug)('starting config server and shard servers', shardArgs);
|
|
125
|
+
const [configsvr, ...shardsvrs] = await Promise.all((0, util_1.range)(shards + 1).map((i) => MongoCluster.start({
|
|
126
|
+
...options,
|
|
127
|
+
args: [...shardArgs, i > 0 ? '--shardsvr' : '--configsvr'],
|
|
128
|
+
topology: 'replset',
|
|
129
|
+
})));
|
|
130
|
+
cluster.shards.push(configsvr, ...shardsvrs);
|
|
131
|
+
(0, util_1.debug)('starting mongos');
|
|
132
|
+
const mongos = await mongoserver_1.MongoServer.start({
|
|
133
|
+
...options,
|
|
134
|
+
binary: 'mongos',
|
|
135
|
+
args: [
|
|
136
|
+
...((_c = options.args) !== null && _c !== void 0 ? _c : []),
|
|
137
|
+
'--configdb',
|
|
138
|
+
`${configsvr.replSetName}/${configsvr.hostport}`,
|
|
139
|
+
],
|
|
140
|
+
});
|
|
141
|
+
cluster.servers.push(mongos);
|
|
142
|
+
await mongos.withClient(async (client) => {
|
|
143
|
+
for (const shard of shardsvrs) {
|
|
144
|
+
const shardSpec = `${shard.replSetName}/${shard.hostport}`;
|
|
145
|
+
(0, util_1.debug)('adding shard', shardSpec);
|
|
146
|
+
await client.db('admin').command({
|
|
147
|
+
addShard: shardSpec,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
(0, util_1.debug)('added shards');
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return cluster;
|
|
154
|
+
}
|
|
155
|
+
async close() {
|
|
156
|
+
await Promise.all([...this.servers, ...this.shards].map((closable) => closable.close()));
|
|
157
|
+
this.servers = [];
|
|
158
|
+
this.shards = [];
|
|
159
|
+
}
|
|
160
|
+
async withClient(fn) {
|
|
161
|
+
const client = await mongodb_1.MongoClient.connect(this.connectionString);
|
|
162
|
+
try {
|
|
163
|
+
return await fn(client);
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
await client.close(true);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
ref() {
|
|
170
|
+
for (const child of [...this.servers, ...this.shards])
|
|
171
|
+
child.ref();
|
|
172
|
+
}
|
|
173
|
+
unref() {
|
|
174
|
+
for (const child of [...this.servers, ...this.shards])
|
|
175
|
+
child.unref();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.MongoCluster = MongoCluster;
|
|
179
|
+
//# sourceMappingURL=mongocluster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongocluster.js","sourceRoot":"","sources":["../src/mongocluster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { Readable } from 'stream';
|
|
3
|
+
export declare function createLogEntryIterator(stdout: Readable): AsyncIterable<LogEntry>;
|
|
4
|
+
export declare type LogEntry = {
|
|
5
|
+
timestamp: string;
|
|
6
|
+
severity: string;
|
|
7
|
+
component: string;
|
|
8
|
+
context: string;
|
|
9
|
+
message: string;
|
|
10
|
+
id: number | undefined;
|
|
11
|
+
attr: any;
|
|
12
|
+
};
|
|
13
|
+
export declare function parseAnyLogEntry(line: string): LogEntry;
|
|
14
|
+
export declare function isFailureToSetupListener(entry: LogEntry): boolean;
|
|
15
|
+
export declare function filterLogStreamForPort(input: Readable): Promise<{
|
|
16
|
+
port: number;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=mongologreader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongologreader.d.ts","sourceRoot":"","sources":["../src/mongologreader.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIvC,wBAAuB,sBAAsB,CAC3C,MAAM,EAAE,QAAQ,GACf,aAAa,CAAC,QAAQ,CAAC,CAYzB;AAGD,oBAAY,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAyBF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAevD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAKjE;AA0CD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB3B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterLogStreamForPort = exports.isFailureToSetupListener = exports.parseAnyLogEntry = exports.createLogEntryIterator = void 0;
|
|
4
|
+
const stream_1 = require("stream");
|
|
5
|
+
const readline_1 = require("readline");
|
|
6
|
+
async function* createLogEntryIterator(stdout) {
|
|
7
|
+
for await (const line of (0, readline_1.createInterface)({ input: stdout })) {
|
|
8
|
+
if (!line.trim()) {
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const logEntry = parseAnyLogEntry(line);
|
|
13
|
+
yield logEntry;
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.createLogEntryIterator = createLogEntryIterator;
|
|
21
|
+
function parseOldLogEntry(line) {
|
|
22
|
+
const re = /^(?<timestamp>\S*) *(?<severity>\S*) *(?<component>\S*) *\[(?<context>[^\]]+)\]\s*(?<message>.*)$/;
|
|
23
|
+
const match = re.exec(line.trim());
|
|
24
|
+
if (!match) {
|
|
25
|
+
throw new Error(`Could not parse line ${JSON.stringify(line)}`);
|
|
26
|
+
}
|
|
27
|
+
return match.groups;
|
|
28
|
+
}
|
|
29
|
+
function parseAnyLogEntry(line) {
|
|
30
|
+
var _a;
|
|
31
|
+
try {
|
|
32
|
+
const newFormat = JSON.parse(line);
|
|
33
|
+
return {
|
|
34
|
+
id: newFormat.id,
|
|
35
|
+
timestamp: (_a = newFormat.t) === null || _a === void 0 ? void 0 : _a.$date,
|
|
36
|
+
severity: newFormat.s,
|
|
37
|
+
component: newFormat.c,
|
|
38
|
+
context: newFormat.ctx,
|
|
39
|
+
message: newFormat.msg,
|
|
40
|
+
attr: newFormat.attr,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (_b) {
|
|
44
|
+
return parseOldLogEntry(line);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.parseAnyLogEntry = parseAnyLogEntry;
|
|
48
|
+
function isFailureToSetupListener(entry) {
|
|
49
|
+
return (entry.id === 22856 ||
|
|
50
|
+
entry.message.includes('Failed to set up listener'));
|
|
51
|
+
}
|
|
52
|
+
exports.isFailureToSetupListener = isFailureToSetupListener;
|
|
53
|
+
function getPortFromLogEntry(logEntry) {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
let match;
|
|
56
|
+
if (logEntry.id === 23016) {
|
|
57
|
+
return logEntry.attr.port;
|
|
58
|
+
}
|
|
59
|
+
if (logEntry.id === undefined &&
|
|
60
|
+
(match = /^waiting for connections on port (?<port>\d+)$/i.exec(logEntry.message))) {
|
|
61
|
+
return +((_b = (_a = match.groups) === null || _a === void 0 ? void 0 : _a.port) !== null && _b !== void 0 ? _b : '0');
|
|
62
|
+
}
|
|
63
|
+
if (isFailureToSetupListener(logEntry)) {
|
|
64
|
+
throw new Error(`Failed to setup listener (${logEntry.message} ${JSON.stringify(logEntry.attr)})`);
|
|
65
|
+
}
|
|
66
|
+
return -1;
|
|
67
|
+
}
|
|
68
|
+
async function filterLogStreamForPort(input) {
|
|
69
|
+
let port = -1;
|
|
70
|
+
const inputDuplicate = input.pipe(new stream_1.PassThrough({ objectMode: true }));
|
|
71
|
+
try {
|
|
72
|
+
for await (const logEntry of inputDuplicate) {
|
|
73
|
+
if (logEntry.component !== 'NETWORK' ||
|
|
74
|
+
!['initandlisten', 'listener'].includes(logEntry.context)) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
port = getPortFromLogEntry(logEntry);
|
|
78
|
+
if (port !== -1) {
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
input.unpipe(inputDuplicate);
|
|
85
|
+
}
|
|
86
|
+
return { port };
|
|
87
|
+
}
|
|
88
|
+
exports.filterLogStreamForPort = filterLogStreamForPort;
|
|
89
|
+
//# sourceMappingURL=mongologreader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongologreader.js","sourceRoot":"","sources":["../src/mongologreader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MongoClient } from 'mongodb';
|
|
2
|
+
export interface MongoServerOptions {
|
|
3
|
+
binDir?: string;
|
|
4
|
+
binary: string;
|
|
5
|
+
tmpDir: string;
|
|
6
|
+
logDir?: string;
|
|
7
|
+
args?: string[];
|
|
8
|
+
docker?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class MongoServer {
|
|
11
|
+
private buildInfo?;
|
|
12
|
+
private childProcess?;
|
|
13
|
+
private pid?;
|
|
14
|
+
private port?;
|
|
15
|
+
private dbPath?;
|
|
16
|
+
private closing;
|
|
17
|
+
private constructor();
|
|
18
|
+
serialize(): unknown;
|
|
19
|
+
static deserialize(serialized: any): Promise<MongoServer>;
|
|
20
|
+
get hostport(): string;
|
|
21
|
+
get serverVersion(): string;
|
|
22
|
+
get serverVariant(): 'enterprise' | 'community';
|
|
23
|
+
static start({ ...options }: MongoServerOptions): Promise<MongoServer>;
|
|
24
|
+
static _start({ ...options }: MongoServerOptions): Promise<MongoServer>;
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
private _populateBuildInfo;
|
|
27
|
+
withClient<Fn extends (client: MongoClient) => any>(fn: Fn): Promise<ReturnType<Fn>>;
|
|
28
|
+
ref(): void;
|
|
29
|
+
unref(): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=mongoserver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoserver.d.ts","sourceRoot":"","sources":["../src/mongoserver.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKtC,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;IAIP,SAAS,IAAI,OAAO;WAQP,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAU/D,IAAI,QAAQ,IAAI,MAAM,CAKrB;IAGD,IAAI,aAAa,IAAI,MAAM,CAK1B;IACD,IAAI,aAAa,IAAI,YAAY,GAAG,WAAW,CAO9C;WAEY,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;WAiC/D,MAAM,CAAC,EAClB,GAAG,OAAO,EACX,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;IAqHtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBd,kBAAkB;IAO1B,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,WAAW,KAAK,GAAG,EACtD,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAW1B,GAAG,IAAI,IAAI;IAMX,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MongoServer = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const mongologreader_1 = require("./mongologreader");
|
|
10
|
+
const stream_1 = require("stream");
|
|
11
|
+
const mongodb_1 = require("mongodb");
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const events_1 = require("events");
|
|
14
|
+
const util_1 = require("./util");
|
|
15
|
+
class MongoServer {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.closing = false;
|
|
18
|
+
}
|
|
19
|
+
serialize() {
|
|
20
|
+
return {
|
|
21
|
+
pid: this.pid,
|
|
22
|
+
port: this.port,
|
|
23
|
+
dbPath: this.dbPath,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
static async deserialize(serialized) {
|
|
27
|
+
const srv = new MongoServer();
|
|
28
|
+
srv.pid = serialized.pid;
|
|
29
|
+
srv.port = serialized.port;
|
|
30
|
+
srv.dbPath = serialized.dbPath;
|
|
31
|
+
await srv._populateBuildInfo();
|
|
32
|
+
return srv;
|
|
33
|
+
}
|
|
34
|
+
get hostport() {
|
|
35
|
+
if (this.port === undefined) {
|
|
36
|
+
throw new Error('Cannot get host/port for closed server');
|
|
37
|
+
}
|
|
38
|
+
return `127.0.0.1:${this.port}`;
|
|
39
|
+
}
|
|
40
|
+
get serverVersion() {
|
|
41
|
+
if (!this.buildInfo) {
|
|
42
|
+
throw new Error('Cannot get version for closed server');
|
|
43
|
+
}
|
|
44
|
+
return this.buildInfo.version;
|
|
45
|
+
}
|
|
46
|
+
get serverVariant() {
|
|
47
|
+
var _a, _b;
|
|
48
|
+
if (!this.buildInfo) {
|
|
49
|
+
throw new Error('Cannot get version for closed server');
|
|
50
|
+
}
|
|
51
|
+
return ((_b = (_a = this.buildInfo.modules) === null || _a === void 0 ? void 0 : _a.includes) === null || _b === void 0 ? void 0 : _b.call(_a, 'enterprise'))
|
|
52
|
+
? 'enterprise'
|
|
53
|
+
: 'community';
|
|
54
|
+
}
|
|
55
|
+
static async start({ ...options }) {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
if (options.binary === 'mongos' && !((_a = options.args) === null || _a === void 0 ? void 0 : _a.includes('--port'))) {
|
|
58
|
+
const minPort = 1025;
|
|
59
|
+
const maxPort = 49151;
|
|
60
|
+
let port = Math.floor(Math.random() * (maxPort - minPort) + minPort);
|
|
61
|
+
while (true) {
|
|
62
|
+
try {
|
|
63
|
+
(0, util_1.debug)('Trying to spawn mongos on port', port);
|
|
64
|
+
return await this._start({
|
|
65
|
+
...options,
|
|
66
|
+
args: [...((_b = options.args) !== null && _b !== void 0 ? _b : []), '--port', String(port)],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err.errorLogEntries.some(mongologreader_1.isFailureToSetupListener)) {
|
|
71
|
+
if (port === maxPort)
|
|
72
|
+
port = minPort;
|
|
73
|
+
else
|
|
74
|
+
port++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return await this._start(options);
|
|
82
|
+
}
|
|
83
|
+
static async _start({ ...options }) {
|
|
84
|
+
var _a, _b, _c, _d;
|
|
85
|
+
const srv = new MongoServer();
|
|
86
|
+
if (!options.docker) {
|
|
87
|
+
const dbPath = path_1.default.join(options.tmpDir, `db-${(0, util_1.uuid)()}`);
|
|
88
|
+
await fs_1.promises.mkdir(dbPath, { recursive: true });
|
|
89
|
+
srv.dbPath = dbPath;
|
|
90
|
+
}
|
|
91
|
+
const commandline = [];
|
|
92
|
+
if (options.docker) {
|
|
93
|
+
commandline.push('docker', 'run', '--network=host');
|
|
94
|
+
if (options.binDir) {
|
|
95
|
+
commandline.push(`--volume=${options.binDir}:/runner-bin:ro`);
|
|
96
|
+
}
|
|
97
|
+
commandline.push(options.docker);
|
|
98
|
+
if (options.binDir) {
|
|
99
|
+
commandline.push(`/runner-bin/${options.binary}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
commandline.push(options.binary);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (options.binDir) {
|
|
106
|
+
commandline.push(path_1.default.join(options.binDir, options.binary));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
commandline.push(options.binary);
|
|
110
|
+
}
|
|
111
|
+
commandline.push(...((_a = options.args) !== null && _a !== void 0 ? _a : []));
|
|
112
|
+
if (!((_b = options.args) === null || _b === void 0 ? void 0 : _b.includes('--port')))
|
|
113
|
+
commandline.push('--port', '0');
|
|
114
|
+
if (!((_c = options.args) === null || _c === void 0 ? void 0 : _c.includes('--dbpath')) && options.binary === 'mongod')
|
|
115
|
+
commandline.push('--dbpath', options.docker ? '/tmp' : srv.dbPath);
|
|
116
|
+
if (!((_d = options.args) === null || _d === void 0 ? void 0 : _d.includes('--unixSocketPrefix')) &&
|
|
117
|
+
process.platform !== 'win32')
|
|
118
|
+
commandline.push('--nounixsocket');
|
|
119
|
+
(0, util_1.debug)('starting server', commandline);
|
|
120
|
+
const [executable, ...args] = commandline;
|
|
121
|
+
const proc = (0, child_process_1.spawn)(executable, args, {
|
|
122
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
123
|
+
cwd: options.tmpDir,
|
|
124
|
+
detached: true,
|
|
125
|
+
});
|
|
126
|
+
await (0, events_1.once)(proc, 'spawn');
|
|
127
|
+
srv.childProcess = proc;
|
|
128
|
+
srv.pid = proc.pid;
|
|
129
|
+
const { stdout, stderr } = proc;
|
|
130
|
+
stdout.setEncoding('utf8');
|
|
131
|
+
stderr.setEncoding('utf8');
|
|
132
|
+
if (options.logDir) {
|
|
133
|
+
const outFile = path_1.default.join(options.logDir, `${options.binary}-${String(proc.pid)}-${new Date()
|
|
134
|
+
.toISOString()
|
|
135
|
+
.replace(/[^-_a-zA-Z0-9.]/g, '')}.log`);
|
|
136
|
+
await fs_1.promises.mkdir(options.logDir, { recursive: true });
|
|
137
|
+
const outStream = (0, fs_1.createWriteStream)(outFile);
|
|
138
|
+
await (0, events_1.once)(outStream, 'open');
|
|
139
|
+
stdout.pipe(outStream, { end: false });
|
|
140
|
+
stderr.pipe(outStream, { end: false });
|
|
141
|
+
Promise.all([(0, events_1.once)(stdout, 'end'), (0, events_1.once)(stderr, 'end')]).then(() => outStream.end(), () => {
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
stderr.on('data', (chunk) => (0, util_1.debug)('server stderr', chunk));
|
|
146
|
+
stderr.resume();
|
|
147
|
+
stdout.resume();
|
|
148
|
+
}
|
|
149
|
+
const errorLogEntries = [];
|
|
150
|
+
try {
|
|
151
|
+
const logEntryStream = stream_1.Readable.from((0, mongologreader_1.createLogEntryIterator)(stdout));
|
|
152
|
+
logEntryStream.on('data', (entry) => {
|
|
153
|
+
if (!srv.closing && ['E', 'F'].includes(entry.severity)) {
|
|
154
|
+
errorLogEntries.push(entry);
|
|
155
|
+
(0, util_1.debug)('mongodb server output', entry);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
const { port } = await (0, mongologreader_1.filterLogStreamForPort)(logEntryStream);
|
|
159
|
+
(0, util_1.debug)('server listening on port', port);
|
|
160
|
+
if (port === -1) {
|
|
161
|
+
let message = 'Server log output did not include port or socket';
|
|
162
|
+
if (errorLogEntries.length > 0) {
|
|
163
|
+
const format = (entry) => `${entry.message} ${JSON.stringify(entry.attr)}`;
|
|
164
|
+
message = `Server failed to start: ${errorLogEntries
|
|
165
|
+
.map(format)
|
|
166
|
+
.join(', ')} from ${commandline.join(' ')})`;
|
|
167
|
+
}
|
|
168
|
+
const err = new Error(message);
|
|
169
|
+
err.errorLogEntries = errorLogEntries;
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
172
|
+
logEntryStream.resume();
|
|
173
|
+
srv.port = port;
|
|
174
|
+
await srv._populateBuildInfo();
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
await srv.close();
|
|
178
|
+
throw err;
|
|
179
|
+
}
|
|
180
|
+
return srv;
|
|
181
|
+
}
|
|
182
|
+
async close() {
|
|
183
|
+
this.closing = true;
|
|
184
|
+
if (this.childProcess) {
|
|
185
|
+
(0, util_1.debug)('closing running process', this.childProcess.pid);
|
|
186
|
+
if (this.childProcess.exitCode === null) {
|
|
187
|
+
this.childProcess.kill('SIGKILL');
|
|
188
|
+
await (0, events_1.once)(this.childProcess, 'exit');
|
|
189
|
+
}
|
|
190
|
+
(0, util_1.debug)('stopped running process');
|
|
191
|
+
this.childProcess = undefined;
|
|
192
|
+
}
|
|
193
|
+
else if (this.pid !== undefined) {
|
|
194
|
+
(0, util_1.debug)('closing externally started process', this.pid);
|
|
195
|
+
process.kill(this.pid, 'SIGKILL');
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
if (this.dbPath)
|
|
199
|
+
await fs_1.promises.rm(this.dbPath, { recursive: true });
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
(0, util_1.debug)('failed to remove dbPath', err);
|
|
203
|
+
}
|
|
204
|
+
this.buildInfo = undefined;
|
|
205
|
+
this.port = undefined;
|
|
206
|
+
this.dbPath = undefined;
|
|
207
|
+
}
|
|
208
|
+
async _populateBuildInfo() {
|
|
209
|
+
this.buildInfo = await this.withClient(async (client) => await client.db('admin').command({ buildInfo: 1 }));
|
|
210
|
+
(0, util_1.debug)('got server build info', this.serverVersion, this.serverVariant);
|
|
211
|
+
}
|
|
212
|
+
async withClient(fn) {
|
|
213
|
+
const client = await mongodb_1.MongoClient.connect(`mongodb://${this.hostport}/?directConnection=true`);
|
|
214
|
+
try {
|
|
215
|
+
return await fn(client);
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
await client.close(true);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
ref() {
|
|
222
|
+
var _a, _b, _c, _d, _e;
|
|
223
|
+
(_a = this.childProcess) === null || _a === void 0 ? void 0 : _a.ref();
|
|
224
|
+
(_c = (_b = this.childProcess) === null || _b === void 0 ? void 0 : _b.stdout) === null || _c === void 0 ? void 0 : _c.ref();
|
|
225
|
+
(_e = (_d = this.childProcess) === null || _d === void 0 ? void 0 : _d.stderr) === null || _e === void 0 ? void 0 : _e.ref();
|
|
226
|
+
}
|
|
227
|
+
unref() {
|
|
228
|
+
var _a, _b, _c, _d, _e;
|
|
229
|
+
(_a = this.childProcess) === null || _a === void 0 ? void 0 : _a.unref();
|
|
230
|
+
(_c = (_b = this.childProcess) === null || _b === void 0 ? void 0 : _b.stdout) === null || _c === void 0 ? void 0 : _c.unref();
|
|
231
|
+
(_e = (_d = this.childProcess) === null || _d === void 0 ? void 0 : _d.stderr) === null || _e === void 0 ? void 0 : _e.unref();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.MongoServer = MongoServer;
|
|
235
|
+
//# sourceMappingURL=mongoserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoserver.js","sourceRoot":"","sources":["../src/mongoserver.ts"],"names":[],"mappings":";;;;;;AACA,iDAAsC;AACtC,2BAAuD;AAEvD,qDAI0B;AAC1B,mCAAkC;AAElC,qCAAsC;AACtC,gDAAwB;AACxB,mCAA8B;AAC9B,iCAAqC;AAWrC,MAAa,WAAW;IAQtB;QAFQ,YAAO,GAAG,KAAK,CAAC;IAIxB,CAAC;IAED,SAAS;QACP,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAe;QACtC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QACzB,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/B,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC3D;QACD,OAAO,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAGD,IAAI,aAAa;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACzD;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,IAAI,aAAa;;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACzD;QACD,OAAO,CAAA,MAAA,MAAA,IAAI,CAAC,SAAS,CAAC,OAAO,0CAAE,QAAQ,mDAAG,YAAY,CAAC;YACrD,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,WAAW,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAsB;;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA,EAAE;YAIpE,MAAM,OAAO,GAAG,IAAI,CAAC;YACrB,MAAM,OAAO,GAAG,KAAK,CAAC;YACtB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;YAErE,OAAO,IAAI,EAAE;gBACX,IAAI;oBACF,IAAA,YAAK,EAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC;oBAC9C,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC;wBACvB,GAAG,OAAO;wBACV,IAAI,EAAE,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,IAAI,mCAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;qBACxD,CAAC,CAAC;iBACJ;gBAAC,OAAO,GAAG,EAAE;oBACZ,IACI,GAAW,CAAC,eAA8B,CAAC,IAAI,CAC/C,yCAAwB,CACzB,EACD;wBACA,IAAI,IAAI,KAAK,OAAO;4BAAE,IAAI,GAAG,OAAO,CAAC;;4BAChC,IAAI,EAAE,CAAC;wBACZ,SAAS;qBACV;oBACD,MAAM,GAAG,CAAC;iBACX;aACF;SACF;QACD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAClB,GAAG,OAAO,EACS;;QACnB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAE9B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnB,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAA,WAAI,GAAE,EAAE,CAAC,CAAC;YACzD,MAAM,aAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;SACrB;QAED,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,WAAW,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;aAC/D;YACD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,WAAW,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;aACnD;iBAAM;gBACL,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aAClC;SACF;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE;YACzB,WAAW,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;SAC7D;aAAM;YACL,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAClC;QAED,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,UAAU,CAAC,CAAA,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;YACpE,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAO,CAAC,CAAC;QACtE,IACE,CAAC,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;YAC7C,OAAO,CAAC,QAAQ,KAAK,OAAO;YAE5B,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAErC,IAAA,YAAK,EAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE,IAAI,EAAE;YACnC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;YAClC,GAAG,EAAE,OAAO,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,IAAA,aAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1B,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAEnB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CACvB,OAAO,CAAC,MAAM,EACd,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;iBAChD,WAAW,EAAE;iBACb,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,MAAM,CACzC,CAAC;YACF,MAAM,aAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,IAAA,sBAAiB,EAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,IAAA,aAAI,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAA,aAAI,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAA,aAAI,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1D,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EACrB,GAAG,EAAE;YAEL,CAAC,CACF,CAAC;SACH;aAAM;YACL,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,YAAK,EAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,EAAE,CAAC;SACjB;QAED,MAAM,eAAe,GAAe,EAAE,CAAC;QACvC,IAAI;YAEF,MAAM,cAAc,GAAG,iBAAQ,CAAC,IAAI,CAAC,IAAA,uCAAsB,EAAC,MAAM,CAAC,CAAC,CAAC;YACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACvD,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,IAAA,YAAK,EAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;iBACvC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,uCAAsB,EAAC,cAAc,CAAC,CAAC;YAC9D,IAAA,YAAK,EAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;gBAGf,IAAI,OAAO,GAAG,kDAAkD,CAAC;gBACjE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,EAAE,CACjC,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,OAAO,GAAG,2BAA2B,eAAe;yBACjD,GAAG,CAAC,MAAM,CAAC;yBACX,IAAI,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;iBAChD;gBACD,MAAM,GAAG,GAA6C,IAAI,KAAK,CAC7D,OAAO,CACR,CAAC;gBACF,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC;gBACtC,MAAM,GAAG,CAAC;aACX;YACD,cAAc,CAAC,MAAM,EAAE,CAAC;YAExB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAChB,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC;SAChC;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,GAAG,CAAC;SACX;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAA,YAAK,EAAC,yBAAyB,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,IAAI,EAAE;gBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAClC,MAAM,IAAA,aAAI,EAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;aACvC;YACD,IAAA,YAAK,EAAC,yBAAyB,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SAC/B;aAAM,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;YACjC,IAAA,YAAK,EAAC,oCAAoC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;SACnC;QACD,IAAI;YACF,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,aAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SAChE;QAAC,OAAO,GAAG,EAAE;YACZ,IAAA,YAAK,EAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CACrE,CAAC;QACF,IAAA,YAAK,EAAC,uBAAuB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,EAAM;QAEN,MAAM,MAAM,GAAG,MAAM,qBAAW,CAAC,OAAO,CACtC,aAAa,IAAI,CAAC,QAAQ,yBAAyB,CACpD,CAAC;QACF,IAAI;YACF,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;SACzB;gBAAS;YACR,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1B;IACH,CAAC;IAED,GAAG;;QACD,MAAA,IAAI,CAAC,YAAY,0CAAE,GAAG,EAAE,CAAC;QACzB,MAAC,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAc,0CAAE,GAAG,EAAE,CAAC;QAC1C,MAAC,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAc,0CAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;IAED,KAAK;;QACH,MAAA,IAAI,CAAC,YAAY,0CAAE,KAAK,EAAE,CAAC;QAC3B,MAAC,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAc,0CAAE,KAAK,EAAE,CAAC;QAC5C,MAAC,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAc,0CAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;CACF;AApQD,kCAoQC"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import createDebug from 'debug';
|
|
2
|
+
export declare const debug: createDebug.Debugger;
|
|
3
|
+
export declare const uuid: () => string;
|
|
4
|
+
export declare const sleep: (ms: number) => Promise<void>;
|
|
5
|
+
export declare const range: (n: number) => number[];
|
|
6
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,OAAO,CAAC;AAEhC,eAAO,MAAM,KAAK,sBAAgC,CAAC;AACnD,eAAO,MAAM,IAAI,cAA0C,CAAC;AAC5D,eAAO,MAAM,KAAK,OAAQ,MAAM,KAAG,QAAQ,IAAI,CACR,CAAC;AACxC,eAAO,MAAM,KAAK,MAAO,MAAM,KAAG,MAAM,EAA0B,CAAC"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.range = exports.sleep = exports.uuid = exports.debug = void 0;
|
|
7
|
+
const mongodb_1 = require("mongodb");
|
|
8
|
+
const debug_1 = __importDefault(require("debug"));
|
|
9
|
+
exports.debug = (0, debug_1.default)('mongodb-runner');
|
|
10
|
+
const uuid = () => new mongodb_1.BSON.UUID().toHexString(true);
|
|
11
|
+
exports.uuid = uuid;
|
|
12
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
13
|
+
exports.sleep = sleep;
|
|
14
|
+
const range = (n) => [...Array(n).keys()];
|
|
15
|
+
exports.range = range;
|
|
16
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA+B;AAC/B,kDAAgC;AAEnB,QAAA,KAAK,GAAG,IAAA,eAAW,EAAC,gBAAgB,CAAC,CAAC;AAC5C,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,cAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAA/C,QAAA,IAAI,QAA2C;AACrD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CACjD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAD3B,QAAA,KAAK,SACsB;AACjC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAY,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAAtD,QAAA,KAAK,SAAiD"}
|