All files / lib/internal/streams duplexpair.js

98.04% Statements 50/51
87.5% Branches 7/8
100% Functions 5/5
98.04% Lines 50/51

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 529x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 20018x 20018x 20018x 20018x 9x 9x 28x 28x 17x 17x 17x 28x 9x 9x 17x   17x 17x 17x 17x 17x 9x 9x 3x 3x 3x 9x 9x 9x 9x 10009x 10009x 10009x 10009x 10009x 9x 9x 9x  
'use strict';
 
const {
  Symbol,
} = primordials;
 
const { Duplex } = require('stream');
 
const kCallback = Symbol('Callback');
const kOtherSide = Symbol('Other');
 
class DuplexSocket extends Duplex {
  constructor() {
    super();
    this[kCallback] = null;
    this[kOtherSide] = null;
  }
 
  _read() {
    const callback = this[kCallback];
    if (callback) {
      this[kCallback] = null;
      callback();
    }
  }
 
  _write(chunk, encoding, callback) {
    if (chunk.length === 0) {
      process.nextTick(callback);
    } else {
      this[kOtherSide].push(chunk);
      this[kOtherSide][kCallback] = callback;
    }
  }
 
  _final(callback) {
    this[kOtherSide].on('end', callback);
    this[kOtherSide].push(null);
  }
}
 
class DuplexPair {
  constructor() {
    this.socket1 = new DuplexSocket();
    this.socket2 = new DuplexSocket();
    this.socket1[kOtherSide] = this.socket2;
    this.socket2[kOtherSide] = this.socket1;
  }
}
 
module.exports = DuplexPair;