Markdown or Chalk
Print through a single interface as Markdown or terminal output (ansi / chalk).
Usage
The core idea: keep your formatting calls the same, and decide output style at runtime.
import { getOutputStyler } from 'markdown-or-chalk';
const printAsMarkdown = true;
const format = getOutputStyler(printAsMarkdown);
format.header('Wow');
This lets one code path support terminal UX and markdown/report output.
API
getOutputStyler(style)
Returns a formatter for one of these styles:
'markdown'– Markdown output'ansi'– ANSI terminal output'chalk'– Chalk-flavored terminal output (legacy compatibility; prefer'ansi')
getMdastOutputter(style)
Returns only the fromMdast renderer function for the selected style.
Instance Methods
| Method | Description |
|---|---|
header(text, level?) |
Heading (1-6, default 1). Markdown: # text. Terminal: bold+underline |
bold(text) |
Bold. Markdown: **text**. Terminal: bold |
dim(text) |
Dim/italic. Markdown: _text_. Terminal: dim |
italic(text) |
Italic. Markdown: _text_. Terminal: italic |
strikethrough(text) |
Strikethrough. Markdown: ~~text~~. Terminal: strikethrough |
code(text) |
Inline code. Markdown: `text`. Terminal: plain text |
hyperlink(text, url, options?) |
Link. Markdown: [text](url) (options ignored). Terminal: terminal link. Options: { fallback?: boolean, fallbackToUrl?: boolean } |
list(items) |
Bullet list. Markdown: * item. Terminal: - item |
indent(text, level?) |
Indent by level × 2 spaces (default level is 1) |
json(value) |
JSON output. Markdown: fenced code block. Terminal: plain JSON |
table(rows, align?, options?) |
Table. Markdown: GFM table (supports { tablePipeAlign?: boolean }). Terminal: aligned columns |
fromMdast(node, options?) |
Render any mdast node to string |
Getters
| Getter | Returns |
|---|---|
type |
'markdown', 'ansi', or 'chalk' |
logSymbols |
{info, success, warning, error} — emoji or styled symbols |
logSymbolsMdast |
{info, success, warning, error} — mdast-compatible symbols |
chalk |
ChalkInstance in chalk mode (deprecated, prefer 'ansi') |
Exported Helpers
| Helper | Description |
|---|---|
mdastTableHelper(rows, align?) |
Build an mdast Table node |
mdastListHelper(items) |
Build an mdast List node |
mdastLinkify(value, url, skipLinks?) |
Build an mdast Link or Text node |
Advanced: mdast helpers
Compose fromMdast with the mdast helpers to build rich structured output:
import { getMdastOutputter, mdastListHelper, mdastLinkify } from 'markdown-or-chalk';
const fromMdast = getMdastOutputter('markdown');
const list = mdastListHelper([
[mdastLinkify('chalk', 'https://www.npmjs.com/package/chalk')],
[mdastLinkify('mdast', 'https://www.npmjs.com/package/mdast')],
['plain text item'],
]);
console.log(fromMdast(list));
// * [chalk](https://www.npmjs.com/package/chalk)
// * [mdast](https://www.npmjs.com/package/mdast)
// * plain text item
Migration: 0.2.x → 0.3.x
What changed
- Constructor-based usage was replaced with a selector function:
getOutputStyler('markdown' | 'ansi' | 'chalk')
getMdastOutputter('markdown' | 'ansi' | 'chalk')was added as a convenience for mdast-only flows.- Existing
getOutputStyler(style).fromMdast(node)usage still works.
- Existing
- Style is now selected using explicit string modes (
'markdown','ansi','chalk'). typeis the mode discriminator.chalkgetter is legacy (deprecated) and only relevant in'chalk'mode (prefer'ansi').
Before / after
// Before (0.2.x)
import MarkdownOrChalk from 'markdown-or-chalk';
const formatMd = new MarkdownOrChalk(true);
const formatCli = new MarkdownOrChalk(false);
// After (0.3.x)
import { getOutputStyler } from 'markdown-or-chalk';
const formatMd = getOutputStyler('markdown');
const formatCli = getOutputStyler('ansi');
// After (0.3.x), mdast-only outputter
import { getMdastOutputter } from 'markdown-or-chalk';
const fromMdast = getMdastOutputter('markdown');
const output = fromMdast(node);
Migration checklist
- Replace constructor usage with
getOutputStyler()/getMdastOutputter(). - Replace boolean mode selection with explicit style strings.
- If branching by mode, check
.type. - Keep
.chalkusage only for legacy paths. - Re-check output-sensitive behavior:
hyperlink()in markdown modelist()formattingtable()formatting