@@ -2,8 +2,8 @@ import * as dns from 'dns';
2
2
import * as fs from 'fs' ;
3
3
import { URL , URLSearchParams } from 'url' ;
4
4
import { AuthMechanism } from './cmap/auth/defaultAuthProviders' ;
5
- import { ReadPreference , ReadPreferenceModeId } from './read_preference' ;
6
- import { ReadConcern , ReadConcernLevelId } from './read_concern' ;
5
+ import { ReadPreference , ReadPreferenceMode } from './read_preference' ;
6
+ import { ReadConcern , ReadConcernLevel } from './read_concern' ;
7
7
import { W , WriteConcern } from './write_concern' ;
8
8
import { MongoParseError } from './error' ;
9
9
import {
@@ -23,11 +23,12 @@ import {
23
23
MongoClientOptions ,
24
24
MongoOptions ,
25
25
PkFactory ,
26
- ServerApi
26
+ ServerApi ,
27
+ ServerApiVersion
27
28
} from './mongo_client' ;
28
29
import { MongoCredentials } from './cmap/auth/mongo_credentials' ;
29
30
import type { TagSet } from './sdam/server_description' ;
30
- import { Logger , LoggerLevelId } from './logger' ;
31
+ import { Logger , LoggerLevel } from './logger' ;
31
32
import { PromiseProvider } from './promise_provider' ;
32
33
import { Encrypter } from './encrypter' ;
33
34
@@ -590,10 +591,24 @@ export const OPTIONS = {
590
591
serverApi : {
591
592
target : 'serverApi' ,
592
593
transform ( { values : [ version ] } ) : ServerApi {
593
- if ( typeof version === 'string' ) {
594
- return { version } ;
594
+ const serverApiToValidate =
595
+ typeof version === 'string' ? ( { version } as ServerApi ) : ( version as ServerApi ) ;
596
+ const versionToValidate = serverApiToValidate && serverApiToValidate . version ;
597
+ if ( ! versionToValidate ) {
598
+ throw new MongoParseError (
599
+ `Invalid \`serverApi\` property; must specify a version from the following enum: ["${ Object . values (
600
+ ServerApiVersion
601
+ ) . join ( '", "' ) } "]`
602
+ ) ;
603
+ }
604
+ if ( ! Object . values ( ServerApiVersion ) . some ( v => v === versionToValidate ) ) {
605
+ throw new MongoParseError (
606
+ `Invalid server API version=${ versionToValidate } ; must be in the following enum: ["${ Object . values (
607
+ ServerApiVersion
608
+ ) . join ( '", "' ) } "]`
609
+ ) ;
595
610
}
596
- return version as ServerApi ;
611
+ return serverApiToValidate ;
597
612
}
598
613
} ,
599
614
checkKeys : {
@@ -728,7 +743,7 @@ export const OPTIONS = {
728
743
loggerLevel : {
729
744
target : 'logger' ,
730
745
transform ( { values : [ value ] } ) {
731
- return new Logger ( 'MongoClient' , { loggerLevel : value as LoggerLevelId } ) ;
746
+ return new Logger ( 'MongoClient' , { loggerLevel : value as LoggerLevel } ) ;
732
747
}
733
748
} ,
734
749
maxIdleTimeMS : {
@@ -818,7 +833,7 @@ export const OPTIONS = {
818
833
transform ( { values : [ level ] , options } ) {
819
834
return ReadConcern . fromOptions ( {
820
835
...options . readConcern ,
821
- level : level as ReadConcernLevelId
836
+ level : level as ReadConcernLevel
822
837
} ) ;
823
838
}
824
839
} ,
@@ -845,7 +860,7 @@ export const OPTIONS = {
845
860
maxStalenessSeconds : options . readPreference ?. maxStalenessSeconds
846
861
} ;
847
862
return new ReadPreference (
848
- value as ReadPreferenceModeId ,
863
+ value as ReadPreferenceMode ,
849
864
options . readPreference ?. tags ,
850
865
rpOpts
851
866
) ;
0 commit comments