diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index 458ab8d45de5a7..ca20c08b258c3c 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -76,6 +76,8 @@ const { const { kIsClosedPromise, + kIsErrored, + kIsWritable, kControllerErrorFunction, } = require('internal/streams/utils'); @@ -183,6 +185,14 @@ class WritableStream { size); } + get [kIsErrored]() { + return this[kState].state === 'errored'; + } + + get [kIsWritable]() { + return this[kState].state === 'writable'; + } + /** * @readonly * @type {boolean} diff --git a/test/parallel/test-whatwg-writablestream.js b/test/parallel/test-whatwg-writablestream.js index 19dfa5fa79f4b3..88d9c57b9de752 100644 --- a/test/parallel/test-whatwg-writablestream.js +++ b/test/parallel/test-whatwg-writablestream.js @@ -4,6 +4,8 @@ const common = require('../common'); const assert = require('assert'); +const { isErrored, isWritable } = require('stream'); + const { WritableStream, WritableStreamDefaultController, @@ -171,6 +173,27 @@ class Sink { })); } +{ + const stream = new WritableStream(); + assert.strictEqual(isWritable(stream), true); + stream.close().then(common.mustCall(() => { + assert.strictEqual(isWritable(stream), false); + })); +} + +{ + const stream = new WritableStream({ + write: common.mustCall((chunk, controller) => { + controller.error(new Error()); + }) + }); + const writer = stream.getWriter(); + assert.strictEqual(isErrored(stream), false); + writer.write().then(common.mustCall(() => { + assert.strictEqual(isErrored(stream), true); + })); +} + { assert.throws(() => Reflect.get(WritableStream.prototype, 'locked', {}), { code: 'ERR_INVALID_THIS',