123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import {inherits} from 'util';
- import {nextTick} from 'process';
- import {Readable} from './readable';
- import {Writable} from './writable';
- inherits(Duplex, Readable);
- var keys = Object.keys(Writable.prototype);
- for (var v = 0; v < keys.length; v++) {
- var method = keys[v];
- if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
- }
- export default Duplex;
- export function Duplex(options) {
- if (!(this instanceof Duplex)) return new Duplex(options);
- Readable.call(this, options);
- Writable.call(this, options);
- if (options && options.readable === false) this.readable = false;
- if (options && options.writable === false) this.writable = false;
- this.allowHalfOpen = true;
- if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
- this.once('end', onend);
- }
- // the no-half-open enforcer
- function onend() {
- // if we allow half-open state, or if the writable side ended,
- // then we're ok.
- if (this.allowHalfOpen || this._writableState.ended) return;
- // no more data can be written.
- // But allow more writes to happen in this tick.
- nextTick(onEndNT, this);
- }
- function onEndNT(self) {
- self.end();
- }
|