You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							1.2 KiB
						
					
					
				'use strict'; | 
						|
const ansiEscapes = require('ansi-escapes'); | 
						|
const cliCursor = require('cli-cursor'); | 
						|
const wrapAnsi = require('wrap-ansi'); | 
						|
 | 
						|
const getWidth = stream => { | 
						|
	const columns = stream.columns; | 
						|
 | 
						|
	if (!columns) { | 
						|
		return 80; | 
						|
	} | 
						|
 | 
						|
	// Windows appears to wrap a character early | 
						|
	// I hate Windows so much | 
						|
	if (process.platform === 'win32') { | 
						|
		return columns - 1; | 
						|
	} | 
						|
 | 
						|
	return columns; | 
						|
}; | 
						|
 | 
						|
const main = (stream, options) => { | 
						|
	options = Object.assign({ | 
						|
		showCursor: false | 
						|
	}, options); | 
						|
 | 
						|
	let prevLineCount = 0; | 
						|
 | 
						|
	const render = function () { | 
						|
		if (!options.showCursor) { | 
						|
			cliCursor.hide(); | 
						|
		} | 
						|
 | 
						|
		let out = [].join.call(arguments, ' ') + '\n'; | 
						|
		out = wrapAnsi(out, getWidth(stream), { | 
						|
			trim: false, | 
						|
			hard: true, | 
						|
			wordWrap: false | 
						|
		}); | 
						|
		stream.write(ansiEscapes.eraseLines(prevLineCount) + out); | 
						|
		prevLineCount = out.split('\n').length; | 
						|
	}; | 
						|
 | 
						|
	render.clear = () => { | 
						|
		stream.write(ansiEscapes.eraseLines(prevLineCount)); | 
						|
		prevLineCount = 0; | 
						|
	}; | 
						|
 | 
						|
	render.done = () => { | 
						|
		prevLineCount = 0; | 
						|
 | 
						|
		if (!options.showCursor) { | 
						|
			cliCursor.show(); | 
						|
		} | 
						|
	}; | 
						|
 | 
						|
	return render; | 
						|
}; | 
						|
 | 
						|
module.exports = main(process.stdout); | 
						|
module.exports.stderr = main(process.stderr); | 
						|
module.exports.create = main;
 | 
						|
 |