nthmail / lib / head.js
all-in-one smtp+imap with minimal setup
git clone http://git.nthia.dev/nthmail

const { Transform } = require('stream')

module.exports = function (cb) {
  let last = [0,0,0]
  let buffers = cb ? [] : null
  return new Transform({
    write(buf, enc, next) {
      for (let i = 0; i < buf.length; i++) {
        last[2] = last[1]
        last[1] = last[0]
        last[0] = buf[i]
        let found = false
        if (last[0] === 0x0a && last[1] === 0x0a) {
          this.push(buf.slice(0,i))
          this.push(null)
          if (buffers) {
            buffers.push(buf.slice(0,i))
            cb(null, Buffer.concat(buffers))
          }
          return
        } else if (last[0] === 0x0a && last[1] === 0x0d && last[2] === 0x0a) {
          this.push(buf.slice(0,i))
          this.push(null)
          if (buffers) {
            buffers.push(buf.slice(0,i))
            cb(null, Buffer.concat(buffers))
          }
          return
        }
      }
      this.push(buf)
      if (buffers) buffers.push(buf)
      next()
    },
    finish(next) {
      if (buffers) {
        cb(null, Buffer.concat(buffers))
      }
      next()
    }
  })
}