@@ -18,7 +18,7 @@ import debug from 'debug';
1818import { EventEmitter } from 'events' ;
1919import { promises as fspromises } from 'fs' ;
2020import { AddUserOptions , MongoClient } from 'mongodb' ;
21- import { InstanceInfoError , StateError } from './util/errors' ;
21+ import { InstanceInfoError , StateError , UnknownVersionError } from './util/errors' ;
2222import * as os from 'os' ;
2323import { DryMongoBinary } from './util/DryMongoBinary' ;
2424import * as semver from 'semver' ;
@@ -372,8 +372,17 @@ export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced {
372372 const opts = await DryMongoBinary . generateOptions ( this . opts . binary ) ;
373373 let storageEngine = instOpts . storageEngine ;
374374
375+ // try to convert a string to a valid semver, like "v6.0-latest" (compiles to "6.0.0")
376+ // use "0.0.0" as a fallback to have a valid semver for later checks, but warn on invalid
377+ const coercedVersion = semver . coerce ( opts . version ) ?? new semver . SemVer ( '0.0.0' ) ;
378+
379+ // warn on invalid version here, a invalid version will be thrown in MongoBinaryDownloadUrl if downloading
380+ if ( semver . eq ( coercedVersion , '0.0.0' ) ) {
381+ console . warn ( new UnknownVersionError ( opts . version ) ) ;
382+ }
383+
375384 // warn when storage engine "ephemeralForTest" is explicitly used and switch to "wiredTiger"
376- if ( storageEngine === 'ephemeralForTest' && semver . gte ( opts . version , '7.0.0' ) ) {
385+ if ( storageEngine === 'ephemeralForTest' && semver . gte ( coercedVersion , '7.0.0' ) ) {
377386 console . warn (
378387 'Storage Engine "ephemeralForTest" is removed since mongodb 7.0.0, automatically using "wiredTiger"!\n' +
379388 'This warning is because the mentioned storage engine is explicitly used and mongodb version is 7.0.0 or higher'
@@ -383,7 +392,7 @@ export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced {
383392 }
384393
385394 if ( isNullOrUndefined ( storageEngine ) ) {
386- if ( semver . gte ( opts . version , '7.0.0' ) ) {
395+ if ( semver . gte ( coercedVersion , '7.0.0' ) ) {
387396 storageEngine = 'wiredTiger' ;
388397 } else {
389398 storageEngine = 'ephemeralForTest' ;
0 commit comments