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.
		
		
		
		
		
			
		
			
				
					26 lines
				
				828 B
			
		
		
			
		
	
	
					26 lines
				
				828 B
			| 
											3 years ago
										 | 'use strict' | ||
|  | var stringWidth = require('string-width') | ||
|  | var stripAnsi = require('strip-ansi') | ||
|  | 
 | ||
|  | module.exports = wideTruncate | ||
|  | 
 | ||
|  | function wideTruncate (str, target) { | ||
|  |   if (stringWidth(str) === 0) return str | ||
|  |   if (target <= 0) return '' | ||
|  |   if (stringWidth(str) <= target) return str | ||
|  | 
 | ||
|  |   // We compute the number of bytes of ansi sequences here and add
 | ||
|  |   // that to our initial truncation to ensure that we don't slice one
 | ||
|  |   // that we want to keep in half.
 | ||
|  |   var noAnsi = stripAnsi(str) | ||
|  |   var ansiSize = str.length + noAnsi.length | ||
|  |   var truncated = str.slice(0, target + ansiSize) | ||
|  | 
 | ||
|  |   // we have to shrink the result to account for our ansi sequence buffer
 | ||
|  |   // (if an ansi sequence was truncated) and double width characters.
 | ||
|  |   while (stringWidth(truncated) > target) { | ||
|  |     truncated = truncated.slice(0, -1) | ||
|  |   } | ||
|  |   return truncated | ||
|  | } |