summaryrefslogtreecommitdiff
path: root/deps/undici/src/lib/api/readable.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/undici/src/lib/api/readable.js')
-rw-r--r--deps/undici/src/lib/api/readable.js20
1 files changed, 18 insertions, 2 deletions
diff --git a/deps/undici/src/lib/api/readable.js b/deps/undici/src/lib/api/readable.js
index 9c184d14e1..a184e8eb51 100644
--- a/deps/undici/src/lib/api/readable.js
+++ b/deps/undici/src/lib/api/readable.js
@@ -4,7 +4,7 @@
const assert = require('assert')
const { Readable } = require('stream')
-const { RequestAbortedError, NotSupportedError } = require('../core/errors')
+const { RequestAbortedError, NotSupportedError, InvalidArgumentError } = require('../core/errors')
const util = require('../core/util')
const { ReadableStreamFrom, toUSVString } = require('../core/util')
@@ -146,15 +146,31 @@ module.exports = class BodyReadable extends Readable {
async dump (opts) {
let limit = opts && Number.isFinite(opts.limit) ? opts.limit : 262144
+ const signal = opts && opts.signal
+ const abortFn = () => {
+ this.destroy()
+ }
+ if (signal) {
+ if (typeof signal !== 'object' || !('aborted' in signal)) {
+ throw new InvalidArgumentError('signal must be an AbortSignal')
+ }
+ util.throwIfAborted(signal)
+ signal.addEventListener('abort', abortFn, { once: true })
+ }
try {
for await (const chunk of this) {
+ util.throwIfAborted(signal)
limit -= Buffer.byteLength(chunk)
if (limit < 0) {
return
}
}
} catch {
- // Do nothing...
+ util.throwIfAborted(signal)
+ } finally {
+ if (signal) {
+ signal.removeEventListener('abort', abortFn)
+ }
}
}
}