diff options
author | LinuxWizard42 <computerwizard@linuxmail.org> | 2022-10-12 22:54:37 +0300 |
---|---|---|
committer | LinuxWizard42 <computerwizard@linuxmail.org> | 2022-10-12 22:54:37 +0300 |
commit | 703e03aba33f234712206769f57717ba7d92d23d (patch) | |
tree | 0041f04ccb75bd5379c764e9fe42249fffe75fc3 /node_modules/single-line-log/index.js | |
parent | ab6e257e6e9d9a483d7e86f220d8b209a2cd7753 (diff) | |
download | FlashRunner-703e03aba33f234712206769f57717ba7d92d23d.tar.gz FlashRunner-703e03aba33f234712206769f57717ba7d92d23d.tar.zst |
Added export_allowed file to make repository visible in cgit
Diffstat (limited to 'node_modules/single-line-log/index.js')
-rw-r--r-- | node_modules/single-line-log/index.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/node_modules/single-line-log/index.js b/node_modules/single-line-log/index.js new file mode 100644 index 0000000..c1201be --- /dev/null +++ b/node_modules/single-line-log/index.js @@ -0,0 +1,51 @@ +var MOVE_LEFT = new Buffer('1b5b3130303044', 'hex').toString(); +var MOVE_UP = new Buffer('1b5b3141', 'hex').toString(); +var CLEAR_LINE = new Buffer('1b5b304b', 'hex').toString(); +var stringWidth = require('string-width'); + +module.exports = function(stream) { + var write = stream.write; + var str; + + stream.write = function(data) { + if (str && data !== str) str = null; + return write.apply(this, arguments); + }; + + if (stream === process.stderr || stream === process.stdout) { + process.on('exit', function() { + if (str !== null) stream.write(''); + }); + } + + var prevLineCount = 0; + var log = function() { + str = ''; + var nextStr = Array.prototype.join.call(arguments, ' '); + + // Clear screen + for (var i=0; i<prevLineCount; i++) { + str += MOVE_LEFT + CLEAR_LINE + (i < prevLineCount-1 ? MOVE_UP : ''); + } + + // Actual log output + str += nextStr; + stream.write(str); + + // How many lines to remove on next clear screen + var prevLines = nextStr.split('\n'); + prevLineCount = 0; + for (var i=0; i < prevLines.length; i++) { + prevLineCount += Math.ceil(stringWidth(prevLines[i]) / stream.columns) || 1; + } + }; + + log.clear = function() { + stream.write(''); + }; + + return log; +}; + +module.exports.stdout = module.exports(process.stdout); +module.exports.stderr = module.exports(process.stderr); |