|
| 1 | +import { type DeserializeOptions } from 'bson'; |
| 2 | + |
1 | 3 | import {
|
2 | 4 | type BSONElement,
|
3 | 5 | type BSONSerializeOptions,
|
4 | 6 | BSONType,
|
5 | 7 | type Document,
|
6 | 8 | Long,
|
7 | 9 | parseToElementsToArray,
|
| 10 | + parseUtf8ValidationOption, |
| 11 | + pluckBSONSerializeOptions, |
8 | 12 | type Timestamp
|
9 | 13 | } from '../../bson';
|
10 | 14 | import { MongoUnexpectedServerResponseError } from '../../error';
|
11 | 15 | import { type ClusterTime } from '../../sdam/common';
|
12 | 16 | import { decorateDecryptionResult, ns } from '../../utils';
|
13 |
| -import { type JSTypeOf, OnDemandDocument } from './on_demand/document'; |
| 17 | +import { |
| 18 | + type JSTypeOf, |
| 19 | + OnDemandDocument, |
| 20 | + type OnDemandDocumentDeserializeOptions |
| 21 | +} from './on_demand/document'; |
14 | 22 |
|
15 | 23 | // eslint-disable-next-line no-restricted-syntax
|
16 | 24 | const enum BSONElementOffset {
|
@@ -112,7 +120,8 @@ export class MongoDBResponse extends OnDemandDocument {
|
112 | 120 | this.get('recoveryToken', BSONType.object)?.toObject({
|
113 | 121 | promoteValues: false,
|
114 | 122 | promoteLongs: false,
|
115 |
| - promoteBuffers: false |
| 123 | + promoteBuffers: false, |
| 124 | + validation: { utf8: true } |
116 | 125 | }) ?? null
|
117 | 126 | );
|
118 | 127 | }
|
@@ -165,6 +174,14 @@ export class MongoDBResponse extends OnDemandDocument {
|
165 | 174 | }
|
166 | 175 | return this.clusterTime ?? null;
|
167 | 176 | }
|
| 177 | + |
| 178 | + public override toObject(options?: BSONSerializeOptions): Record<string, any> { |
| 179 | + const exactBSONOptions = { |
| 180 | + ...pluckBSONSerializeOptions(options ?? {}), |
| 181 | + validation: parseUtf8ValidationOption(options) |
| 182 | + }; |
| 183 | + return super.toObject(exactBSONOptions); |
| 184 | + } |
168 | 185 | }
|
169 | 186 |
|
170 | 187 | /** @internal */
|
@@ -248,12 +265,13 @@ export class CursorResponse extends MongoDBResponse {
|
248 | 265 | this.cursor.get('postBatchResumeToken', BSONType.object)?.toObject({
|
249 | 266 | promoteValues: false,
|
250 | 267 | promoteLongs: false,
|
251 |
| - promoteBuffers: false |
| 268 | + promoteBuffers: false, |
| 269 | + validation: { utf8: true } |
252 | 270 | }) ?? null
|
253 | 271 | );
|
254 | 272 | }
|
255 | 273 |
|
256 |
| - public shift(options?: BSONSerializeOptions): any { |
| 274 | + public shift(options: OnDemandDocumentDeserializeOptions): any { |
257 | 275 | if (this.iterated >= this.batchSize) {
|
258 | 276 | return null;
|
259 | 277 | }
|
@@ -305,7 +323,7 @@ export class ExplainedCursorResponse extends CursorResponse {
|
305 | 323 | return this._length;
|
306 | 324 | }
|
307 | 325 |
|
308 |
| - override shift(options?: BSONSerializeOptions | undefined) { |
| 326 | + override shift(options?: DeserializeOptions) { |
309 | 327 | if (this._length === 0) return null;
|
310 | 328 | this._length -= 1;
|
311 | 329 | return this.toObject(options);
|
|
0 commit comments