• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* eslint-disable node-core/require-common-first, node-core/required-modules */
2'use strict';
3
4// Hijack stdout and stderr
5const stdWrite = {};
6function hijackStdWritable(name, listener) {
7  const stream = process[name];
8  const _write = stdWrite[name] = stream.write;
9
10  stream.writeTimes = 0;
11  stream.write = function(data, callback) {
12    try {
13      listener(data);
14    } catch (e) {
15      process.nextTick(() => { throw e; });
16    }
17
18    _write.call(stream, data, callback);
19    stream.writeTimes++;
20  };
21}
22
23function restoreWritable(name) {
24  process[name].write = stdWrite[name];
25  delete process[name].writeTimes;
26}
27
28module.exports = {
29  hijackStdout: hijackStdWritable.bind(null, 'stdout'),
30  hijackStderr: hijackStdWritable.bind(null, 'stderr'),
31  restoreStdout: restoreWritable.bind(null, 'stdout'),
32  restoreStderr: restoreWritable.bind(null, 'stderr')
33};
34