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.
		
		
		
		
		
			
		
			
				
					
					
						
							135 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
	
	
							135 lines
						
					
					
						
							3.7 KiB
						
					
					
				/* | 
						|
	MIT License http://www.opensource.org/licenses/mit-license.php | 
						|
	Author Tobias Koppers @sokra | 
						|
*/ | 
						|
 | 
						|
"use strict"; | 
						|
 | 
						|
const truncateArgs = require("../logging/truncateArgs"); | 
						|
const util = require("util"); | 
						|
 | 
						|
const tty = process.stderr.isTTY && process.env.TERM !== "dumb"; | 
						|
 | 
						|
let currentStatusMessage = undefined; | 
						|
let hasStatusMessage = false; | 
						|
let currentIndent = ""; | 
						|
let currentCollapsed = 0; | 
						|
 | 
						|
const indent = (str, prefix, colorPrefix, colorSuffix) => { | 
						|
	if (str === "") return str; | 
						|
	prefix = currentIndent + prefix; | 
						|
	if (tty) { | 
						|
		return ( | 
						|
			prefix + | 
						|
			colorPrefix + | 
						|
			str.replace(/\n/g, colorSuffix + "\n" + prefix + colorPrefix) + | 
						|
			colorSuffix | 
						|
		); | 
						|
	} else { | 
						|
		return prefix + str.replace(/\n/g, "\n" + prefix); | 
						|
	} | 
						|
}; | 
						|
 | 
						|
const clearStatusMessage = () => { | 
						|
	if (hasStatusMessage) { | 
						|
		process.stderr.write("\x1b[2K\r"); | 
						|
		hasStatusMessage = false; | 
						|
	} | 
						|
}; | 
						|
 | 
						|
const writeStatusMessage = () => { | 
						|
	if (!currentStatusMessage) return; | 
						|
	const l = process.stderr.columns; | 
						|
	const args = l | 
						|
		? truncateArgs(currentStatusMessage, l - 1) | 
						|
		: currentStatusMessage; | 
						|
	const str = args.join(" "); | 
						|
	const coloredStr = `\u001b[1m${str}\u001b[39m\u001b[22m`; | 
						|
	process.stderr.write(`\x1b[2K\r${coloredStr}`); | 
						|
	hasStatusMessage = true; | 
						|
}; | 
						|
 | 
						|
const writeColored = (prefix, colorPrefix, colorSuffix) => { | 
						|
	return (...args) => { | 
						|
		if (currentCollapsed > 0) return; | 
						|
		clearStatusMessage(); | 
						|
		// @ts-ignore | 
						|
		const str = indent(util.format(...args), prefix, colorPrefix, colorSuffix); | 
						|
		process.stderr.write(str + "\n"); | 
						|
		writeStatusMessage(); | 
						|
	}; | 
						|
}; | 
						|
 | 
						|
const writeGroupMessage = writeColored( | 
						|
	"<-> ", | 
						|
	"\u001b[1m\u001b[36m", | 
						|
	"\u001b[39m\u001b[22m" | 
						|
); | 
						|
 | 
						|
const writeGroupCollapsedMessage = writeColored( | 
						|
	"<+> ", | 
						|
	"\u001b[1m\u001b[36m", | 
						|
	"\u001b[39m\u001b[22m" | 
						|
); | 
						|
 | 
						|
module.exports = { | 
						|
	log: writeColored("    ", "\u001b[1m", "\u001b[22m"), | 
						|
	debug: writeColored("    ", "", ""), | 
						|
	trace: writeColored("    ", "", ""), | 
						|
	info: writeColored("<i> ", "\u001b[1m\u001b[32m", "\u001b[39m\u001b[22m"), | 
						|
	warn: writeColored("<w> ", "\u001b[1m\u001b[33m", "\u001b[39m\u001b[22m"), | 
						|
	error: writeColored("<e> ", "\u001b[1m\u001b[31m", "\u001b[39m\u001b[22m"), | 
						|
	logTime: writeColored("<t> ", "\u001b[1m\u001b[35m", "\u001b[39m\u001b[22m"), | 
						|
	group: (...args) => { | 
						|
		writeGroupMessage(...args); | 
						|
		if (currentCollapsed > 0) { | 
						|
			currentCollapsed++; | 
						|
		} else { | 
						|
			currentIndent += "  "; | 
						|
		} | 
						|
	}, | 
						|
	groupCollapsed: (...args) => { | 
						|
		writeGroupCollapsedMessage(...args); | 
						|
		currentCollapsed++; | 
						|
	}, | 
						|
	groupEnd: () => { | 
						|
		if (currentCollapsed > 0) currentCollapsed--; | 
						|
		else if (currentIndent.length >= 2) | 
						|
			currentIndent = currentIndent.slice(0, currentIndent.length - 2); | 
						|
	}, | 
						|
	// eslint-disable-next-line node/no-unsupported-features/node-builtins | 
						|
	profile: console.profile && (name => console.profile(name)), | 
						|
	// eslint-disable-next-line node/no-unsupported-features/node-builtins | 
						|
	profileEnd: console.profileEnd && (name => console.profileEnd(name)), | 
						|
	clear: | 
						|
		tty && | 
						|
		// eslint-disable-next-line node/no-unsupported-features/node-builtins | 
						|
		console.clear && | 
						|
		(() => { | 
						|
			clearStatusMessage(); | 
						|
			// eslint-disable-next-line node/no-unsupported-features/node-builtins | 
						|
			console.clear(); | 
						|
			writeStatusMessage(); | 
						|
		}), | 
						|
	status: tty | 
						|
		? (name, ...args) => { | 
						|
				args = args.filter(Boolean); | 
						|
				if (name === undefined && args.length === 0) { | 
						|
					clearStatusMessage(); | 
						|
					currentStatusMessage = undefined; | 
						|
				} else if ( | 
						|
					typeof name === "string" && | 
						|
					name.startsWith("[webpack.Progress] ") | 
						|
				) { | 
						|
					currentStatusMessage = [name.slice(19), ...args]; | 
						|
					writeStatusMessage(); | 
						|
				} else if (name === "[webpack.Progress]") { | 
						|
					currentStatusMessage = [...args]; | 
						|
					writeStatusMessage(); | 
						|
				} else { | 
						|
					currentStatusMessage = [name, ...args]; | 
						|
					writeStatusMessage(); | 
						|
				} | 
						|
		  } | 
						|
		: writeColored("<s> ", "", "") | 
						|
};
 | 
						|
 |