fix: consolidate iterable closing #3218
Draft
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.
We have
MultiaddrConnection
s andStream
s, both of which have.source
and.sink
properties, can be aborted or closed gracefully by iterables ending or by explicitly invoking.close
/.abort
methods, and can be closed or partially closed by the remote end of the connection.All
Stream
implementations extendAbstractStream
which has let us concentrate the logic that controls these (many) closing criteria but the same is not true ofMultiaddrConnection
s.Where we have these we transform them to async iterables which may not suit the underlying transport.
Here we consolidate the common parts of
MultiaddrConnection
s into anAbstractMultiaddrConnection
, and consolidate the async iterable/closing parts of bothMultiaddrConnection
s andStream
s into aHalfCloseableDuplex
abstract superclass.This greatly simplifies the transport implementations and allows all transports to benefit from tests run on the super class and we can remove a few dependencies (
it-ws
,stream-to-it
, etc).Change checklist