blob: 5284a699ac3fb52e2a6143db7c31db0b90385c1a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
'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
}
|