import { Writable as WritableStream } from 'readable-stream';
import promiseToCallback from 'promise-to-callback';

class AsyncWritableStream extends WritableStream {
  constructor(asyncWriteFn, _opts) {
    const opts = { objectMode: true, ..._opts };
    super(opts);
    this._asyncWriteFn = asyncWriteFn;
  }

  // write from incoming stream to state
  _write(chunk, encoding, callback) {
    promiseToCallback(this._asyncWriteFn(chunk, encoding))(callback);
  }
}

export default function createStreamSink(asyncWriteFn, _opts) {
  return new AsyncWritableStream(asyncWriteFn, _opts);
}