Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import EventEmitter, { EventMap } from 'bare-events'
import Buffer, { BufferEncoding } from 'bare-buffer'
import { AbortSignal } from 'bare-abort-controller'

type StreamEncoding = BufferEncoding | 'buffer'

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

export function getStreamError(stream: Stream, opts?: { all?: boolean }): Error | null

export function addAbortSignal<S extends Stream>(signal: AbortSignal, stream: S): S
}

export = Stream
11 changes: 11 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ exports.isWritable = function isWritable(stream) {

exports.getStreamError = stream.getStreamError

exports.addAbortSignal = function addAbortSignal(signal, stream) {
function onAbort() {
stream.destroy(signal.reason)
}

if (signal.aborted) onAbort()
else signal.addEventListener('abort', onAbort)

return stream
}

exports.Stream = exports

exports.Readable = class Readable extends stream.Readable {
Expand Down
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,22 @@
"teex": "^1.0.1"
},
"devDependencies": {
"bare-abort-controller": "^1.1.0",
"bare-buffer": "^3.0.0",
"bare-events": "^2.5.4",
"brittle": "^3.5.2",
"prettier": "^3.3.3",
"prettier-config-holepunch": "^2.0.0"
},
"peerDependencies": {
"bare-abort-controller": "*",
"bare-buffer": "*",
"bare-events": "*"
},
"peerDependenciesMeta": {
"bare-abort-controller": {
"optional": true
},
"bare-buffer": {
"optional": true
},
Expand Down
17 changes: 16 additions & 1 deletion test/basic.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
const test = require('brittle')
const AbortController = require('bare-abort-controller')

const {
Stream,
Readable,
Expand All @@ -10,7 +12,8 @@ const {
isErrored,
isReadable,
isWritable,
duplexPair
duplexPair,
addAbortSignal
} = require('..')

test('default export', (t) => {
Expand Down Expand Up @@ -735,4 +738,16 @@ test('async disposable', async (t) => {
t.ok(writable.destroyed)
})

test('addSignalAbort', (t) => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
test('addSignalAbort', (t) => {
test('addAbortSignal', (t) => {

t.plan(1)

const controller = new AbortController()

const stream = addAbortSignal(controller.signal, new Readable())

finished(stream, (err) => t.is(err.message, 'The operation was aborted'))

controller.abort()
})

function noop() {}
Loading