Skip to content

Commit 2953816

Browse files
committed
fix: avoid output elision for complimentary std streams
1 parent 3c18247 commit 2953816

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "log-update-async-hook",
3-
"version": "2.0.3",
3+
"version": "2.0.4",
44
"description": "log-update fork that uses async-exit-hook internally",
55
"license": "MIT",
66
"repository": "AndreyBelym/log-update-async-hook",

src/index.js

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,76 @@ var wrapAnsi = require('wrap-ansi');
44
var cliCursor = require('./cli-cursor');
55

66

7+
function isStdStream (stream) {
8+
return stream === process.stdout || stream === process.stderr;
9+
}
10+
711
function main (stream) {
812
var prevLineCount = 0;
13+
var context = { stream };
914

10-
var streamWrite = stream.write;
11-
12-
var overridenWrite = function (...args) {
15+
function overriddenWrite (...args) {
1316
if (prevLineCount)
1417
render.clear();
1518

16-
return streamWrite.apply(this, args);
19+
if (this === process.stderr)
20+
return context.stderrWrite.apply(this, args);
21+
else
22+
return context.stdoutWrite.apply(this, args);
1723
};
1824

25+
function overrideStdStreams (context) {
26+
if (!context.streamWrite && stream.write !== overriddenWrite)
27+
context.streamWrite = context.stream.write;
28+
29+
if (!isStdStream(stream))
30+
return context;
31+
32+
if (process.stderr.write !== overriddenWrite) {
33+
context.stderrWrite = process.stderr.write;
34+
process.stderr.write = overriddenWrite;
35+
}
36+
37+
if (process.stdout.write !== overriddenWrite) {
38+
context.stdoutWrite = process.stdout.write;
39+
process.stdout.write = overriddenWrite;
40+
}
41+
42+
return context;
43+
}
44+
45+
function restoreStdStreams (context) {
46+
if (context.stderrWrite)
47+
process.stderr.write = context.stderrWrite;
48+
49+
if (context.stdoutWrite)
50+
process.stdout.write = context.stdoutWrite;
51+
}
52+
1953
var render = function () {
2054
cliCursor.hide();
2155

22-
if (stream.write !== overridenWrite) {
23-
streamWrite = stream.write;
24-
stream.write = overridenWrite
25-
}
56+
overrideStdStreams(context)
2657

2758
var out = [].join.call(arguments, ' ') + '\n';
2859

2960
out = wrapAnsi(out, process.stdout.columns || 80, {wordWrap: false});
3061

31-
streamWrite.call(stream, ansiEscapes.eraseLines(prevLineCount) + out);
62+
context.streamWrite.call(stream, ansiEscapes.eraseLines(prevLineCount) + out);
3263

3364
prevLineCount = out.split('\n').length;
3465
};
3566

3667
render.clear = function () {
37-
streamWrite.call(stream, ansiEscapes.eraseLines(prevLineCount));
68+
context.streamWrite.call(stream, ansiEscapes.eraseLines(prevLineCount));
3869

3970
prevLineCount = 0;
4071
};
4172

4273
render.done = function () {
4374
prevLineCount = 0;
44-
stream.write = streamWrite;
4575

76+
restoreStdStreams(context);
4677
cliCursor.show();
4778
};
4879

0 commit comments

Comments
 (0)