Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 416x 416x 416x 416x 416x 5108441x 5108441x 5108441x 5108441x 5108441x 5108441x 5108441x 5108441x 5108441x 5108441x 5108441x 5108441x 5102320x 5102320x 5102320x 5102320x 4821377x 280943x 5102320x 30613920x 30597750x 30613920x 40482x 5102320x 748x 4821377x | import { type Document, type Double, Long } from '../bson'; import { ServerType } from '../sdam/common'; import { parseServerType } from '../sdam/server_description'; import type { CompressorName } from './wire_protocol/compression'; const RESPONSE_FIELDS = [ 'minWireVersion', 'maxWireVersion', 'maxBsonObjectSize', 'maxMessageSizeBytes', 'maxWriteBatchSize', 'logicalSessionTimeoutMinutes' ] as const; /** @public */ export interface StreamDescriptionOptions { compressors?: CompressorName[]; logicalSessionTimeoutMinutes?: number; loadBalanced: boolean; } /** @public */ export class StreamDescription { address: string; type: ServerType; minWireVersion?: number; maxWireVersion?: number; maxBsonObjectSize: number; maxMessageSizeBytes: number; maxWriteBatchSize: number; compressors: CompressorName[]; compressor?: CompressorName; logicalSessionTimeoutMinutes?: number; loadBalanced: boolean; __nodejs_mock_server__?: boolean; zlibCompressionLevel?: number; serverConnectionId: bigint | null; public hello: Document | null = null; constructor(address: string, options?: StreamDescriptionOptions) { this.address = address; this.type = ServerType.Unknown; this.minWireVersion = undefined; this.maxWireVersion = undefined; this.maxBsonObjectSize = 16777216; this.maxMessageSizeBytes = 48000000; this.maxWriteBatchSize = 100000; this.logicalSessionTimeoutMinutes = options?.logicalSessionTimeoutMinutes; this.loadBalanced = !!options?.loadBalanced; this.compressors = options && options.compressors && Array.isArray(options.compressors) ? options.compressors : []; this.serverConnectionId = null; } receiveResponse(response: Document | null): void { Iif (response == null) { return; } this.hello = response; this.type = parseServerType(response); if ('connectionId' in response) { this.serverConnectionId = this.parseServerConnectionID(response.connectionId); } else { this.serverConnectionId = null; } for (const field of RESPONSE_FIELDS) { if (response[field] != null) { this[field] = response[field]; } // testing case if ('__nodejs_mock_server__' in response) { this.__nodejs_mock_server__ = response['__nodejs_mock_server__']; } } if (response.compression) { this.compressor = this.compressors.filter(c => response.compression?.includes(c))[0]; } } /* @internal */ parseServerConnectionID(serverConnectionId: number | Double | bigint | Long): bigint { // Connection ids are always integral, so it's safe to coerce doubles as well as // any integral type. return Long.isLong(serverConnectionId) ? serverConnectionId.toBigInt() : // @ts-expect-error: Doubles are coercible to number BigInt(serverConnectionId); } } |