Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34.2k
stream: implement finished() for ReadableStream and WritableStream#46205
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
nodejs-github-bot merged 16 commits into nodejs:main from debadree25:ft/finished-webstreamsJan 18, 2023
Uh oh!
There was an error while loading. Please reload this page.
Merged
Changes from all commits
Commits
Show all changes
16 commits Select commit Hold shift + click to select a range
fd2fa5a stream: implement finished() for ReadableStream and WritableStream
debadree25 7938b4a fixup! restore tests
debadree25 f0b8c92 fixup! add non-stream check
debadree25 3937b22 fixup! fix return
debadree25 70630b3 fixup! remove public property
debadree25 2d7ea18 fixup! use the promise and use process.nextTick
debadree25 b6461d9 fixup! fix code style and nullish checks remove
debadree25 1572862 fixup! remove nullish in writablestreams
debadree25 ebeab98 fixup! add tests
debadree25 dd5391b fixup! remove util changes
debadree25 9aadb9e fixup! lint fix
debadree25 e924b60 fixup! rename streamClosed to closed
debadree25 f1cbaea fixup! remove nullish
debadree25 5ae4f8a fixup! use symbols instead of kState
debadree25 4ab3a7b fixup! remove brandchecks
debadree25 f1ef9e4 fixup! rename kIsClosed
debadree25 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -22,20 +22,23 @@ const{ | ||
| validateBoolean | ||
| } = require('internal/validators'); | ||
| const{Promise } = primordials; | ||
| const{Promise, PromisePrototypeThen } = primordials; | ||
| const{ | ||
| isClosed, | ||
| isReadable, | ||
| isReadableNodeStream, | ||
| isReadableStream, | ||
| isReadableFinished, | ||
| isReadableErrored, | ||
| isWritable, | ||
| isWritableNodeStream, | ||
| isWritableStream, | ||
| isWritableFinished, | ||
| isWritableErrored, | ||
| isNodeStream, | ||
| willEmitClose: _willEmitClose, | ||
| kIsClosedPromise, | ||
| } = require('internal/streams/utils'); | ||
| function isRequest(stream){ | ||
| @@ -58,14 +61,17 @@ function eos(stream, options, callback){ | ||
| callback = once(callback); | ||
| const readable = options.readable ?? isReadableNodeStream(stream); | ||
| const writable = options.writable ?? isWritableNodeStream(stream); | ||
| if (isReadableStream(stream) || isWritableStream(stream)){ | ||
| return eosWeb(stream, options, callback); | ||
| } | ||
| if (!isNodeStream(stream)){ | ||
ronag marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading. Please reload this page. | ||
| // TODO: Webstreams. | ||
| throw new ERR_INVALID_ARG_TYPE('stream', 'Stream', stream); | ||
| throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream); | ||
| } | ||
| const readable = options.readable ?? isReadableNodeStream(stream); | ||
| const writable = options.writable ?? isWritableNodeStream(stream); | ||
| const wState = stream._writableState; | ||
| const rState = stream._readableState; | ||
| @@ -255,6 +261,15 @@ function eos(stream, options, callback){ | ||
| return cleanup; | ||
| } | ||
| function eosWeb(stream, opts, callback){ | ||
RaisinTen marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading. Please reload this page. | ||
| PromisePrototypeThen( | ||
| stream[kIsClosedPromise].promise, | ||
| () => process.nextTick(() => callback.call(stream)), | ||
| (err) => process.nextTick(() => callback.call(stream, err)), | ||
| ); | ||
| return nop; | ||
| } | ||
| function finished(stream, opts){ | ||
| let autoCleanup = false; | ||
| if (opts === null){ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Oops, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These match non-node WebStreams – which I guess is fine, except that
eosWeb()will throw aTypeErrorsince the private propertykIsClosedPromisewill not exist on it. This will in turn mean that thecallbackis never called.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As in you want
eosWebto additionally have a check to throwTypeError?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know what node should do – probably still throw some kind of error.
Currently non-node WebStreams would just throw a
TypeErrorfrom accessing thepromiseproperty on theundefinedkIsClosedPromiseproperty here:node/lib/internal/streams/end-of-stream.js
Line 289 in 4667b07