@@ -2,8 +2,8 @@ import * as dns from 'dns';
22import * as fs from 'fs' ;
33import { URL , URLSearchParams } from 'url' ;
44import { 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' ;
77import { W , WriteConcern } from './write_concern' ;
88import { MongoParseError } from './error' ;
99import {
@@ -23,11 +23,12 @@ import {
2323 MongoClientOptions ,
2424 MongoOptions ,
2525 PkFactory ,
26- ServerApi
26+ ServerApi ,
27+ ServerApiVersion
2728} from './mongo_client' ;
2829import { MongoCredentials } from './cmap/auth/mongo_credentials' ;
2930import type { TagSet } from './sdam/server_description' ;
30- import { Logger , LoggerLevelId } from './logger' ;
31+ import { Logger , LoggerLevel } from './logger' ;
3132import { PromiseProvider } from './promise_provider' ;
3233import { Encrypter } from './encrypter' ;
3334
@@ -590,10 +591,24 @@ export const OPTIONS = {
590591 serverApi : {
591592 target : 'serverApi' ,
592593 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+ ) ;
595610 }
596- return version as ServerApi ;
611+ return serverApiToValidate ;
597612 }
598613 } ,
599614 checkKeys : {
@@ -728,7 +743,7 @@ export const OPTIONS = {
728743 loggerLevel : {
729744 target : 'logger' ,
730745 transform ( { values : [ value ] } ) {
731- return new Logger ( 'MongoClient' , { loggerLevel : value as LoggerLevelId } ) ;
746+ return new Logger ( 'MongoClient' , { loggerLevel : value as LoggerLevel } ) ;
732747 }
733748 } ,
734749 maxIdleTimeMS : {
@@ -818,7 +833,7 @@ export const OPTIONS = {
818833 transform ( { values : [ level ] , options } ) {
819834 return ReadConcern . fromOptions ( {
820835 ...options . readConcern ,
821- level : level as ReadConcernLevelId
836+ level : level as ReadConcernLevel
822837 } ) ;
823838 }
824839 } ,
@@ -845,7 +860,7 @@ export const OPTIONS = {
845860 maxStalenessSeconds : options . readPreference ?. maxStalenessSeconds
846861 } ;
847862 return new ReadPreference (
848- value as ReadPreferenceModeId ,
863+ value as ReadPreferenceMode ,
849864 options . readPreference ?. tags ,
850865 rpOpts
851866 ) ;
0 commit comments