* @template {ConsumeType} T * @param {BodyReadable} stream * @param {T} type * @returns {Promise >}
(stream, type)
| 381 | * @returns {Promise<ConsumeReturnType<T>>} |
| 382 | */ |
| 383 | function consume (stream, type) { |
| 384 | assert(!stream[kConsume]) |
| 385 | |
| 386 | return new Promise((resolve, reject) => { |
| 387 | if (isUnusable(stream)) { |
| 388 | const rState = stream._readableState |
| 389 | if (rState.destroyed && rState.closeEmitted === false) { |
| 390 | stream |
| 391 | .on('error', reject) |
| 392 | .on('close', () => { |
| 393 | reject(new TypeError('unusable')) |
| 394 | }) |
| 395 | } else { |
| 396 | reject(rState.errored ?? new TypeError('unusable')) |
| 397 | } |
| 398 | } else { |
| 399 | queueMicrotask(() => { |
| 400 | stream[kConsume] = { |
| 401 | type, |
| 402 | stream, |
| 403 | resolve, |
| 404 | reject, |
| 405 | length: 0, |
| 406 | body: [] |
| 407 | } |
| 408 | |
| 409 | stream |
| 410 | .on('error', function (err) { |
| 411 | consumeFinish(this[kConsume], err) |
| 412 | }) |
| 413 | .on('close', function () { |
| 414 | if (this[kConsume].body !== null) { |
| 415 | consumeFinish(this[kConsume], new RequestAbortedError()) |
| 416 | } |
| 417 | }) |
| 418 | |
| 419 | consumeStart(stream[kConsume]) |
| 420 | }) |
| 421 | } |
| 422 | }) |
| 423 | } |
| 424 | |
| 425 | /** |
| 426 | * @param {Consume} consume |
no test coverage detected