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 | 155x 155x 155x 155x 155x 993375x 993375x 993375x 993375x 993375x 993375x 993375x 993375x 993375x 993375x 993375x 993375x 991829x 991829x 991829x 991829x 941138x 50691x 991829x 5950974x 5937444x 5950974x 9852x 991829x 108x 941138x | 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); } } |