5aca521c52
- Add comprehensive CouchDB setup and configuration - Update Docker files for CouchDB compatibility - Create Kubernetes manifests for CouchDB deployment - Add migration scripts and documentation - Update seeding scripts to support both CouchDB and MongoDB - Add docker-compose for local development - Create comprehensive setup and deployment guides 🤖 Generated with [AI Assistant] Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
import { MongoInvalidArgumentError } from '../../error';
|
|
import { ReadPreference, type ReadPreferenceLike } from '../../read_preference';
|
|
import { ServerType } from '../../sdam/common';
|
|
import type { Server } from '../../sdam/server';
|
|
import type { ServerDescription } from '../../sdam/server_description';
|
|
import type { Topology } from '../../sdam/topology';
|
|
import { TopologyDescription } from '../../sdam/topology_description';
|
|
import type { Connection } from '../connection';
|
|
|
|
export interface ReadPreferenceOption {
|
|
readPreference?: ReadPreferenceLike;
|
|
}
|
|
|
|
export function getReadPreference(options?: ReadPreferenceOption): ReadPreference {
|
|
// Default to command version of the readPreference.
|
|
let readPreference = options?.readPreference ?? ReadPreference.primary;
|
|
|
|
if (typeof readPreference === 'string') {
|
|
readPreference = ReadPreference.fromString(readPreference);
|
|
}
|
|
|
|
if (!(readPreference instanceof ReadPreference)) {
|
|
throw new MongoInvalidArgumentError(
|
|
'Option "readPreference" must be a ReadPreference instance'
|
|
);
|
|
}
|
|
|
|
return readPreference;
|
|
}
|
|
|
|
export function isSharded(topologyOrServer?: Topology | Server | Connection): boolean {
|
|
if (topologyOrServer == null) {
|
|
return false;
|
|
}
|
|
|
|
if (topologyOrServer.description && topologyOrServer.description.type === ServerType.Mongos) {
|
|
return true;
|
|
}
|
|
|
|
// NOTE: This is incredibly inefficient, and should be removed once command construction
|
|
// happens based on `Server` not `Topology`.
|
|
if (topologyOrServer.description && topologyOrServer.description instanceof TopologyDescription) {
|
|
const servers: ServerDescription[] = Array.from(topologyOrServer.description.servers.values());
|
|
return servers.some((server: ServerDescription) => server.type === ServerType.Mongos);
|
|
}
|
|
|
|
return false;
|
|
}
|