| import ansiRegex from 'ansi-regex'; |
| |
| const regex = ansiRegex(); |
| |
| export default function stripAnsi(string) { |
| if (typeof string !== 'string') { |
| throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); |
| } |
| |
| // Fast path: ANSI codes require ESC (7-bit) or CSI (8-bit) introducer |
| if (!string.includes('\u001B') && !string.includes('\u009B')) { |
| return string; |
| } |
| |
| // Even though the regex is global, we don't need to reset the `.lastIndex` |
| // because unlike `.exec()` and `.test()`, `.replace()` does it automatically |
| // and doing it manually has a performance penalty. |
| return string.replace(regex, ''); |
| } |