(stream: GridFSBucketWriteStream, callback: Callback)
| 282 | } |
| 283 | |
| 284 | function checkDone(stream: GridFSBucketWriteStream, callback: Callback): void { |
| 285 | if (stream.done) { |
| 286 | return queueMicrotask(callback); |
| 287 | } |
| 288 | |
| 289 | if (stream.state.streamEnd && stream.state.outstandingRequests === 0 && !stream.state.errored) { |
| 290 | // Set done so we do not trigger duplicate createFilesDoc |
| 291 | stream.done = true; |
| 292 | // Create a new files doc |
| 293 | const gridFSFile = createFilesDoc( |
| 294 | stream.id, |
| 295 | stream.length, |
| 296 | stream.chunkSizeBytes, |
| 297 | stream.filename, |
| 298 | stream.options.metadata |
| 299 | ); |
| 300 | |
| 301 | if (isAborted(stream, callback)) { |
| 302 | return; |
| 303 | } |
| 304 | |
| 305 | const remainingTimeMS = stream.timeoutContext?.remainingTimeMS; |
| 306 | if (remainingTimeMS != null && remainingTimeMS <= 0) { |
| 307 | return handleError( |
| 308 | stream, |
| 309 | new MongoOperationTimeoutError( |
| 310 | `Upload timed out after ${stream.timeoutContext?.timeoutMS}ms` |
| 311 | ), |
| 312 | callback |
| 313 | ); |
| 314 | } |
| 315 | |
| 316 | stream.files |
| 317 | .insertOne(gridFSFile, { writeConcern: stream.writeConcern, timeoutMS: remainingTimeMS }) |
| 318 | .then( |
| 319 | () => { |
| 320 | stream.gridFSFile = gridFSFile; |
| 321 | callback(); |
| 322 | }, |
| 323 | error => { |
| 324 | return handleError(stream, error, callback); |
| 325 | } |
| 326 | ); |
| 327 | return; |
| 328 | } |
| 329 | |
| 330 | queueMicrotask(callback); |
| 331 | } |
| 332 | |
| 333 | async function checkIndexes(stream: GridFSBucketWriteStream): Promise<void> { |
| 334 | let remainingTimeMS = stream.timeoutContext?.getRemainingTimeMSOrThrow( |
no test coverage detected