Skip to content

Commit ace0284

Browse files
committed
stream: fix isErrored/isWritable for WritableStreams
1 parent d0c1024 commit ace0284

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

lib/internal/webstreams/writablestream.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ const {
7676

7777
const {
7878
kIsClosedPromise,
79+
kIsErrored,
80+
kIsWritable,
7981
kControllerErrorFunction,
8082
} = require('internal/streams/utils');
8183

@@ -183,6 +185,14 @@ class WritableStream {
183185
size);
184186
}
185187

188+
get [kIsErrored]() {
189+
return this[kState].state === 'errored';
190+
}
191+
192+
get [kIsWritable]() {
193+
return this[kState].state === 'writable';
194+
}
195+
186196
/**
187197
* @readonly
188198
* @type {boolean}

test/parallel/test-whatwg-writablestream.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
const common = require('../common');
55
const assert = require('assert');
66

7+
const { isErrored, isWritable } = require('stream');
8+
79
const {
810
WritableStream,
911
WritableStreamDefaultController,
@@ -171,6 +173,27 @@ class Sink {
171173
}));
172174
}
173175

176+
{
177+
const stream = new WritableStream();
178+
assert.strictEqual(isWritable(stream), true);
179+
stream.close().then(common.mustCall(() => {
180+
assert.strictEqual(isWritable(stream), false);
181+
}));
182+
}
183+
184+
{
185+
const stream = new WritableStream({
186+
write: common.mustCall((chunk, controller) => {
187+
controller.error(new Error());
188+
})
189+
});
190+
const writer = stream.getWriter();
191+
assert.strictEqual(isErrored(stream), false);
192+
writer.write().then(common.mustCall(() => {
193+
assert.strictEqual(isErrored(stream), true);
194+
}));
195+
}
196+
174197
{
175198
assert.throws(() => Reflect.get(WritableStream.prototype, 'locked', {}), {
176199
code: 'ERR_INVALID_THIS',

0 commit comments

Comments
 (0)