mafintosh / streamx

An iteration of the Node.js core streams with a series of improvements.
MIT License
226 stars 16 forks source link

Multiple end() calls should throw an error #44

Open martinheidegger opened 3 years ago

martinheidegger commented 3 years ago

The following test currently fails:

tape('repeat calls to .end() should cause an error', function (t) {
  t.plan(4)
  const s = new Writable({
    write (data, cb) {
      t.equals(data, 'a')
      cb()
    }
  })
  s.on('error', function () {
    t.pass('Error called by multiple end calls')
  })
  s.on('close', function () {
    t.end()
  })
  t.equals(s.writable, true)
  s.end('a')
  t.equals(s.writable, false)
  s.end('b')
}

For one, the write method is called for both end() calls and there is no error caused when this is executed. I noted this as incompatibility to the current Node.js streams and am wondering: is that intentional? should that be documented?

mafintosh commented 3 years ago

Yea, always found it very weird how Node.js streams forward user errors as stream.on('errors'). Makes it really hard in practice to find programming issues / runtime stream errors.