Skip to content

Commit c896838

Browse files
authored
Add addAbortSignal support (#18)
1 parent ebadb9a commit c896838

4 files changed

Lines changed: 35 additions & 1 deletion

File tree

index.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import EventEmitter, { EventMap } from 'bare-events'
22
import Buffer, { BufferEncoding } from 'bare-buffer'
3+
import { AbortSignal } from 'bare-abort-controller'
34

45
type StreamEncoding = BufferEncoding | 'buffer'
56

@@ -191,6 +192,8 @@ declare namespace Stream {
191192
export function isWritable(stream: Stream): boolean
192193

193194
export function getStreamError(stream: Stream, opts?: { all?: boolean }): Error | null
195+
196+
export function addAbortSignal<S extends Stream>(signal: AbortSignal, stream: S): S
194197
}
195198

196199
export = Stream

index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@ exports.isWritable = function isWritable(stream) {
2727

2828
exports.getStreamError = stream.getStreamError
2929

30+
exports.addAbortSignal = function addAbortSignal(signal, stream) {
31+
function onAbort() {
32+
stream.destroy(signal.reason)
33+
}
34+
35+
if (signal.aborted) onAbort()
36+
else signal.addEventListener('abort', onAbort)
37+
38+
return stream
39+
}
40+
3041
exports.Stream = exports
3142

3243
exports.Readable = class Readable extends stream.Readable {

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,22 @@
4141
"teex": "^1.0.1"
4242
},
4343
"devDependencies": {
44+
"bare-abort-controller": "^1.1.0",
4445
"bare-buffer": "^3.0.0",
4546
"bare-events": "^2.5.4",
4647
"brittle": "^3.5.2",
4748
"prettier": "^3.3.3",
4849
"prettier-config-holepunch": "^2.0.0"
4950
},
5051
"peerDependencies": {
52+
"bare-abort-controller": "*",
5153
"bare-buffer": "*",
5254
"bare-events": "*"
5355
},
5456
"peerDependenciesMeta": {
57+
"bare-abort-controller": {
58+
"optional": true
59+
},
5560
"bare-buffer": {
5661
"optional": true
5762
},

test/basic.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
const test = require('brittle')
2+
const AbortController = require('bare-abort-controller')
3+
24
const {
35
Stream,
46
Readable,
@@ -10,7 +12,8 @@ const {
1012
isErrored,
1113
isReadable,
1214
isWritable,
13-
duplexPair
15+
duplexPair,
16+
addAbortSignal
1417
} = require('..')
1518

1619
test('default export', (t) => {
@@ -735,4 +738,16 @@ test('async disposable', async (t) => {
735738
t.ok(writable.destroyed)
736739
})
737740

741+
test('addAbortSignal', (t) => {
742+
t.plan(1)
743+
744+
const controller = new AbortController()
745+
746+
const stream = addAbortSignal(controller.signal, new Readable())
747+
748+
finished(stream, (err) => t.is(err.message, 'The operation was aborted'))
749+
750+
controller.abort()
751+
})
752+
738753
function noop() {}

0 commit comments

Comments
 (0)