Incremental migration
Move from ansi-escapes, terminal-link and term-img one import at a time, and from term-img's paths to bytes with one readFile.
Each drop-in is graded on its own, so a program can move one import at a time and ship in between.
One import at a time
- import ansiEscapes, { cursorTo, eraseLines, link } from 'ansi-escapes';
+ import ansiEscapes, { cursorTo, eraseLines, link } from 'paratext';
- import terminalLink from 'terminal-link';
+ import terminalLink from 'paratext/terminal-link';
- import terminalImage from 'term-img';
+ import terminalImage from 'paratext/term-img';Or let the codemod do it: npx burgee migrate --dry-run lists every import it would rewrite —
only drop-ins graded level with their incumbent, so ansi-escapes and terminal-link and not
term-img — and npx burgee migrate rewrites them
(Migrate).
term-img: bytes instead of a path
paratext/term-img takes bytes. Where you passed a path, read it first:
+ import { readFile } from 'node:fs/promises';
- terminalImage('logo.png');
+ terminalImage(await readFile('logo.png'));What changes after the move
The ansi-escapes CSI calls are byte-for-byte what they were. link, image and setCwd now
write their text form on a pipe instead of escape bytes, which is the reason to move
(Compatibility). terminal-link and term-img keep their
incumbents' detection and fallbacks.
Checking each step
npm uninstall ansi-escapes terminal-link term-img
npm ls ansi-escapesnpm ls shows what still pulls ansi-escapes in transitively — log-update and terminal-link
both depend on it.
Testing escape output
Assert what your CLI writes on a supporting terminal and on a pipe by passing a literal runtime to emit() — no environment patching.
paratext
Every export of paratext, with its signature and doc comment: _default, ansiEscapesFor, beep, beginSynchronizedOutput, clearScreen, clearTerminal and 54 more, plus 7 types.