Skip to content
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

Rewrite in TypeScript #52

Closed
wants to merge 0 commits into from
Closed

Rewrite in TypeScript #52

wants to merge 0 commits into from

Conversation

isaacs
Copy link
Owner

@isaacs isaacs commented Jul 6, 2023

This is a big one, please read carefully before upgrading from
prior versions, especially if you extend Minipass in a subclass.

Breaking Changes

  • Rewritten in TypeScript as hybrid esm/cjs build, so a lot of
    types changed in subtle ways, and several behaviors got
    stricter.
  • Minipass now inherits from EventEmitter rather than Stream.
    Nothing from the Stream class was ever used by Minipass, but
    it inherited from Stream to pass checks in some stream
    libraries that checked instanceof Stream. Unfortunately, the
    type difference in the pipe() method signature made it
    challenging to continue doing in TypeScript.
  • It is no longer possible to change the type of data emitted
    after a Minipass stream is instantiated, as this would thwart
    TypeScript's static checks. As a consequence:
    • The setEncoding method and the encoding setter are
      deprecated. Encoding may only be set in the constructor
      options object.
    • objectMode is no longer inferred by writing something other
      than a string or Buffer. It may only be set in the
      constructor options object.
  • If all existing data consumers are removed, via
    stream.unpipe(dest), stream.removeListener('data', handler),
    stream.removeAllListeners('data'), and/or
    stream.removeAllListeners(), then the data will stop flowing.
    Note that it is still possible to explicitly discard a stream's
    data by calling stream.resume() in the absence of any
    consumers.

Features and Fixes

  • Removed a very subtle performance issue that made objectMode
    Minipass streams slower in some cases than node core streams.
    Minipass is now faster than node core streams for all data
    types.
  • The array returned by stream.collect() for objectMode streams
    will have a dataLength property equal to 0, rather than
    undefined.
  • isStream is moved from a static member on the Minipass class
    to a named export.
  • isWritable() and isReadable() methods added.

@isaacs isaacs force-pushed the isaacs/ts branch 4 times, most recently from 408fd90 to 0c22d71 Compare July 7, 2023 23:59
@isaacs isaacs closed this Jul 10, 2023
@isaacs isaacs deleted the isaacs/ts branch July 10, 2023 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant