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 528x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 20018x 20018x 20018x 20018x 8x 8x 28x 28x 17x 17x 17x 28x 8x 8x 17x   17x 17x 17x 17x 17x 8x 8x 3x 3x 3x 8x 8x 8x 8x 10009x 10009x 10009x 10009x 10009x 8x 8x 8x  
'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;