From 9f640addd2b9d3c470f1f4ec97cc70fcfebde5b2 Mon Sep 17 00:00:00 2001 From: Nicolas Morel Date: Fri, 1 Nov 2019 16:43:02 +0100 Subject: [PATCH] [@types/mongodb] Correctly type ReadPreference options (#40000) --- types/mongodb/index.d.ts | 79 +++++++++++++++++++----------------- types/mongodb/test/cursor.ts | 5 ++- types/mongodb/test/index.ts | 2 +- 3 files changed, 45 insertions(+), 41 deletions(-) diff --git a/types/mongodb/index.d.ts b/types/mongodb/index.d.ts index 33b35de0cb..4b650eaabf 100644 --- a/types/mongodb/index.d.ts +++ b/types/mongodb/index.d.ts @@ -206,7 +206,7 @@ export interface SessionOptions { export interface TransactionOptions { readConcern?: ReadConcern; writeConcern?: WriteConcern; - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; } export interface MongoClientCommonOption { @@ -402,27 +402,30 @@ export interface HighAvailabilityOptions { domainsEnabled?: boolean; /** The ReadPreference mode as listed here: http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html */ - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; /** An object representing read preference tags, see: http://mongodb.github.io/node-mongodb-native/3.1/api/ReadPreference.html */ readPreferenceTags?: string[]; } +export type ReadPreferenceMode = 'primary' | 'primaryPreferred' | 'secondary' | 'secondaryPreferred' | 'nearest'; +export type ReadPreferenceOrMode = ReadPreference | ReadPreferenceMode; + // See http://mongodb.github.io/node-mongodb-native/3.1/api/ReadPreference.html export class ReadPreference { - constructor(mode: string, tags: object); - mode: string; + constructor(mode: ReadPreferenceMode, tags: object); + mode: ReadPreferenceMode; tags: any; options: { /** - * Max Secondary Read Stalleness in Seconds + * Max Secondary Read Staleness in Seconds */ maxStalenessSeconds?: number; }; - static PRIMARY: string; - static PRIMARY_PREFERRED: string; - static SECONDARY: string; - static SECONDARY_PREFERRED: string; - static NEAREST: string; + static PRIMARY: 'primary'; + static PRIMARY_PREFERRED: 'primaryPreferred'; + static SECONDARY: 'secondary'; + static SECONDARY_PREFERRED: 'secondaryPreferred'; + static NEAREST: 'nearest'; isValid(mode: string): boolean; static isValid(mode: string): boolean; } @@ -464,7 +467,7 @@ export interface DbCreateOptions extends CommonOptions { /** * the prefered read preference. use 'ReadPreference' class. */ - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; /** * Default: true; Promotes BSON values to native types where possible, set to false to only receive wrapper types. */ @@ -629,8 +632,8 @@ export class Db extends EventEmitter { collections(callback: MongoCallback>>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#command */ command(command: object, callback: MongoCallback): void; - command(command: object, options?: { readPreference: ReadPreference | string, session?: ClientSession }): Promise; - command(command: object, options: { readPreference: ReadPreference | string, session?: ClientSession }, callback: MongoCallback): void; + command(command: object, options?: { readPreference: ReadPreferenceOrMode, session?: ClientSession }): Promise; + command(command: object, options: { readPreference: ReadPreferenceOrMode, session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#createCollection */ createCollection(name: string, callback: MongoCallback>): void; createCollection(name: string, options?: CollectionCreateOptions): Promise>; @@ -647,14 +650,14 @@ export class Db extends EventEmitter { dropDatabase(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#executeDbAdminCommand */ executeDbAdminCommand(command: object, callback: MongoCallback): void; - executeDbAdminCommand(command: object, options?: { readPreference?: ReadPreference | string, session?: ClientSession }): Promise; - executeDbAdminCommand(command: object, options: { readPreference?: ReadPreference | string, session?: ClientSession }, callback: MongoCallback): void; + executeDbAdminCommand(command: object, options?: { readPreference?: ReadPreferenceOrMode, session?: ClientSession }): Promise; + executeDbAdminCommand(command: object, options: { readPreference?: ReadPreferenceOrMode, session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#indexInformation */ indexInformation(name: string, callback: MongoCallback): void; - indexInformation(name: string, options?: { full?: boolean, readPreference?: ReadPreference | string }): Promise; - indexInformation(name: string, options: { full?: boolean, readPreference?: ReadPreference | string }, callback: MongoCallback): void; + indexInformation(name: string, options?: { full?: boolean, readPreference?: ReadPreferenceOrMode }): Promise; + indexInformation(name: string, options: { full?: boolean, readPreference?: ReadPreferenceOrMode }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#listCollections */ - listCollections(filter?: object, options?: { nameOnly?: boolean, batchSize?: number, readPreference?: ReadPreference | string, session?: ClientSession }): CommandCursor; + listCollections(filter?: object, options?: { nameOnly?: boolean, batchSize?: number, readPreference?: ReadPreferenceOrMode, session?: ClientSession }): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#profilingInfo */ /** @deprecated Query the system.profile collection directly. */ profilingInfo(callback: MongoCallback): void; @@ -729,7 +732,7 @@ export interface DbAddUserOptions extends CommonOptions { export interface CollectionCreateOptions extends CommonOptions { raw?: boolean; pkFactory?: object; - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; serializeFunctions?: boolean; strict?: boolean; capped?: boolean; @@ -751,7 +754,7 @@ export interface CollectionCreateOptions extends CommonOptions { export interface DbCollectionOptions extends CommonOptions { raw?: boolean; pkFactory?: object; - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; serializeFunctions?: boolean; strict?: boolean; readConcern?: ReadConcern; @@ -817,8 +820,8 @@ export interface Admin { buildInfo(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#command */ command(command: object, callback: MongoCallback): void; - command(command: object, options?: { readPreference?: ReadPreference | string, maxTimeMS?: number }): Promise; - command(command: object, options: { readPreference?: ReadPreference | string, maxTimeMS?: number }, callback: MongoCallback): void; + command(command: object, options?: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number }): Promise; + command(command: object, options: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#listDatabases */ listDatabases(): Promise; listDatabases(callback: MongoCallback): void; @@ -930,8 +933,8 @@ export interface Collection { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#distinct */ distinct(key: string, callback: MongoCallback): void; distinct(key: string, query: FilterQuery, callback: MongoCallback): void; - distinct(key: string, query?: FilterQuery, options?: { readPreference?: ReadPreference | string, maxTimeMS?: number, session?: ClientSession }): Promise; - distinct(key: string, query: FilterQuery, options: { readPreference?: ReadPreference | string, maxTimeMS?: number, session?: ClientSession }, callback: MongoCallback): void; + distinct(key: string, query?: FilterQuery, options?: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number, session?: ClientSession }): Promise; + distinct(key: string, query: FilterQuery, options: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number, session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#drop */ drop(options?: { session: ClientSession }): Promise; drop(callback: MongoCallback): void; @@ -983,7 +986,7 @@ export interface Collection { reduce: Function | Code, finalize: Function | Code, command: boolean, - options?: { readPreference?: ReadPreference | string, session?: ClientSession } + options?: { readPreference?: ReadPreferenceOrMode, session?: ClientSession } ): Promise; /** @deprecated MongoDB 3.6 or higher no longer supports the group command. We recommend rewriting using the aggregation framework. */ group( @@ -994,7 +997,7 @@ export interface Collection { finalize: Function | Code, command: boolean, options: { - readPreference?: ReadPreference | string, + readPreference?: ReadPreferenceOrMode, session?: ClientSession }, callback: MongoCallback @@ -1035,7 +1038,7 @@ export interface Collection { isCapped(callback: MongoCallback): void; isCapped(options: { session: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#listIndexes */ - listIndexes(options?: { batchSize?: number, readPreference?: ReadPreference | string, session?: ClientSession }): CommandCursor; + listIndexes(options?: { batchSize?: number, readPreference?: ReadPreferenceOrMode, session?: ClientSession }): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#mapReduce */ mapReduce(map: CollectionMapFunction | string, reduce: CollectionReduceFunction | string, callback: MongoCallback): void; mapReduce(map: CollectionMapFunction | string, reduce: CollectionReduceFunction | string, options?: MapReduceOptions): Promise; @@ -1574,7 +1577,7 @@ export interface WiredTigerData { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#aggregate */ export interface CollectionAggregationOptions { - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; /** * Return the query as cursor, on 2.6 > it returns as a real cursor * on pre 2.6 it returns as an emulated cursor. @@ -1675,7 +1678,7 @@ export interface MongoCountPreferences { /** * The preferred read preference */ - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; maxTimeMS?: number; session?: ClientSession; } @@ -1731,7 +1734,7 @@ export interface FindOneAndDeleteOption { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#geoHaystackSearch */ export interface GeoHaystackSearchOptions { - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; maxDistance?: number; search?: object; limit?: number; @@ -1858,7 +1861,7 @@ export interface FindOneOptions { promoteLongs?: boolean; promoteValues?: boolean; promoteBuffers?: boolean; - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; partial?: boolean; maxTimeMS?: number; collation?: CollationDocument; @@ -1897,7 +1900,7 @@ export interface InsertOneWriteOpResult> { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#parallelCollectionScan */ export interface ParallelCollectionScanOptions { - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; batchSize?: number; numCursors?: number; raw?: boolean; @@ -1938,7 +1941,7 @@ export interface ReplaceWriteOpResult extends UpdateWriteOpResult { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#mapReduce */ export interface MapReduceOptions { - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; out?: object; query?: object; sort?: object; @@ -2037,7 +2040,7 @@ export class Cursor extends Readable { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#setCursorOption */ setCursorOption(field: string, value: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#setReadPreference */ - setReadPreference(readPreference: string | ReadPreference): Cursor; + setReadPreference(readPreference: ReadPreferenceOrMode): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#showRecordId */ showRecordId(showRecordId: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#skip */ @@ -2061,7 +2064,7 @@ export interface CursorCommentOptions { limit?: number; maxTimeMS?: number; hint?: string; - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#~iteratorCallback */ @@ -2160,7 +2163,7 @@ export class CommandCursor extends Readable { /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#rewind */ rewind(): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#setReadPreference */ - setReadPreference(readPreference: string | ReadPreference): CommandCursor; + setReadPreference(readPreference: ReadPreferenceOrMode): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#toArray */ toArray(): Promise; toArray(callback: MongoCallback): void; @@ -2194,7 +2197,7 @@ export interface GridFSBucketOptions { bucketName?: string; chunkSizeBytes?: number; writeConcern?: WriteConcern; - readPreference?: ReadPreference | string; + readPreference?: ReadPreferenceOrMode; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#~errorCallback */ @@ -2285,7 +2288,7 @@ export interface ChangeStreamOptions { resumeAfter?: object; batchSize?: number; collation?: CollationDocument; - readPreference?: ReadPreference; + readPreference?: ReadPreferenceOrMode; startAfter?: object; } diff --git a/types/mongodb/test/cursor.ts b/types/mongodb/test/cursor.ts index c5c98048ec..e42431fcea 100644 --- a/types/mongodb/test/cursor.ts +++ b/types/mongodb/test/cursor.ts @@ -1,4 +1,4 @@ -import { connect, Cursor } from 'mongodb'; +import { connect, Cursor, ReadPreference } from 'mongodb'; import { connectionString } from './index'; async function run() { @@ -25,7 +25,8 @@ async function run() { cursor = cursor.project({}); cursor = cursor.returnKey({}); cursor = cursor.setCursorOption('', {}); - cursor = cursor.setReadPreference(''); + cursor = cursor.setReadPreference('primary'); + cursor = cursor.setReadPreference(ReadPreference.SECONDARY_PREFERRED); cursor = cursor.showRecordId({}); cursor = cursor.skip(1); cursor = cursor.snapshot({}); diff --git a/types/mongodb/test/index.ts b/types/mongodb/test/index.ts index 7eaf441bbe..4a8d5a854d 100644 --- a/types/mongodb/test/index.ts +++ b/types/mongodb/test/index.ts @@ -11,7 +11,7 @@ const options: mongodb.MongoClientOptions = { wtimeout: 300, j: true, bufferMaxEntries: 1000, - readPreference: true ? mongodb.ReadPreference.NEAREST : 'string', + readPreference: true ? mongodb.ReadPreference.NEAREST : 'secondaryPreferred', promoteValues: true, pkFactory: {}, poolSize: 1,