parse-ansi
🤖 Parse ansi into an array of ansi-tags and text-chunks.
Parse-ANSI takes an ANSI string as input:
const text = "🤖\u001B[31m DANGER\u001B[0m Will Robbinson"console.log(text)
When you run your text through the ANSI parser...
const parseAnsi = const parsed = console
...Parse-ANSI outputs value, position and style data.
raw: '🤖\u001B[31m DANGER\u001B[0m Will Robbinson' plain: '🤖 DANGER Will Robbinson' textArea: columns: 24 rows: 1 chunks: type: 'text' value: '🤖' position: x: 0 y: 0 n: 0 raw: 0 style: {} type: 'ansi' value: tag: 'red' ansi: '\u001b[31m' position: x: 2 y: 0 n: 2 raw: 2 type: 'text' value: ' DANGER' position: x: 2y: 0n: 2 raw: 7 style: foregroundColor: 'red' type: 'ansi' value: tag: 'reset' ansi: '\u001b[0m' position: x: 9 y: 0 n: 9 raw: 14 type: 'text' value: ' Will Robbinson' position: x: 9 y: 0 n: 9 raw: 18 style: {}
This data can be used to convert ANSI sequences to other formatsm such as HTML, Image, SVG, etc.
Chunk
Each object in the output array is called a "chunk". Each chunk represents one or more of the following data types.
ansi
- ANSI escape sequencenewline
- Newline charactertext
- Text chunk of like-styles
Style
The style object contains a list of styles associated with the current chunk. Each style represents an ANSI Escape sequence that is mapped to friendly name called an ANSI-Tag
.
- Styles are only included in text chunks.
- Styles that are off/closed, are not present in the style object.
The following style object describes a chunk of red text:
foregroundColor: 'red'
This object shows alls styles in combination:
backgroundColor: 'bgRed' foregroundColor: 'white' dim: true bold: true italic: true underline: true strikethrough: true inverse: true
Styles that are closed or reset are not included in the style object.
For example:
// Turn on Boldconst text = '\u001b[1m BOLD' + // Turn off all styles '\u001b[0m NORMAL' const parsed = const styles = parsed console
The above code should log:
// Turn on Bold bold: true // Turn off all styles {}
Position
x: 2 y: 0 n: 2 raw: 2
The position object contains 4 kinds of position:
x
- Plain-text column at which the chunk startsy
- Plain-text crow at which the chunk startsn
- Linear, 1-dimensional plain-text position at which the chunk starts.raw
- Linear 1-dimensional position at which the chunk starts for ANSI or plain-text. This is the real JavaScript position string position of the chunk.
Value
Text Value
The value of a text
chunk is a JavaScript string. The value of a text chunk should never contain any ANSI escape sequences.
type: 'text' value: ' DANGER'
ANSI Value
The value of an ansi
chunk is an object.
value.tag
- Friendly-named ansi-tag.value.ansi
- Raw ANSI string value.
type: 'ansi' value: tag: 'red' ansi: '\u001b[31m'
You can find the list ansi-tags in types/types.ansi-seqs-to-ansi-tags.js.
Install
$ yarn add parse-ansi