markdown-table
Fork by wooorm/markdown-table, Mainly to support cjs (the original author intends to only support esm), reference: #24
Generate fancy Markdown tables.
Install
This package is ESM only:
Node 12+ is needed to use it and it must be import
ed instead of require
d.
npm:
npm install markdown-table
Use
Typical usage (defaults to align left):
import {markdownTable} from 'markdown-table'
markdownTable([
['Branch', 'Commit'],
['main', '0123456789abcdef'],
['staging', 'fedcba9876543210']
])
Yields:
| Branch | Commit |
| ------- | ---------------- |
| main | 0123456789abcdef |
| staging | fedcba9876543210 |
With align:
markdownTable(
[
['Beep', 'No.', 'Boop'],
['beep', '1024', 'xyz'],
['boop', '3388450', 'tuv'],
['foo', '10106', 'qrstuv'],
['bar', '45', 'lmno']
],
{align: ['l', 'c', 'r']}
)
Yields:
| Beep | No. | Boop |
| :--- | :-----: | -----: |
| beep | 1024 | xyz |
| boop | 3388450 | tuv |
| foo | 10106 | qrstuv |
| bar | 45 | lmno |
API
This package exports the following identifiers: markdownTable
. There is no default export.
markdownTable(table[, options])
Turns a given matrix of strings (an array of arrays of strings) into a table.
options
options.align
One style for all columns, or styles for their respective columns (string
or
string[]
). Each style is either 'l'
(left), 'r'
(right), or 'c'
(center). Other values are treated as ''
,
which doesn’t place the colon in the alignment row but does align left.
Only the lowercased first character is used, so Right
is fine.
options.padding
Whether to add a space of padding between delimiters and cells (boolean
, default: true
).
When true
, there is padding:
| Alpha | B |
| ----- | ----- |
| C | Delta |
When false
, there is no padding:
|Alpha|B |
|-----|-----|
|C |Delta|
options.delimiterStart
Whether to begin each row with the delimiter (boolean
, default: true
).
Note: please don’t use this: it could create fragile structures that aren’t understandable to some Markdown parsers.
When true
, there are starting delimiters:
| Alpha | B |
| ----- | ----- |
| C | Delta |
When false
, there are no starting delimiters:
Alpha | B |
----- | ----- |
C | Delta |
options.delimiterEnd
Whether to end each row with the delimiter (boolean
, default: true
).
Note: please don’t use this: it could create fragile structures that aren’t understandable to some Markdown parsers.
When true
, there are ending delimiters:
| Alpha | B |
| ----- | ----- |
| C | Delta |
When false
, there are no ending delimiters:
| Alpha | B
| ----- | -----
| C | Delta
options.alignDelimiters
Whether to align the delimiters (boolean
, default: true
). By default, they are aligned:
| Alpha | B |
| ----- | ----- |
| C | Delta |
Pass false
to make them staggered:
| Alpha | B | | - | - | | C | Delta |
options.stringLength
Method to detect the length of a cell (Function
, default: s => s.length
).
Full-width characters and ANSI-sequences all mess up delimiter alignment when viewing the Markdown source. To fix this,
you have to pass in a stringLength
option to detect the “visible” length of a cell (note that what is and isn’t
visible depends on your editor).
Without such a function, the following:
markdownTable([
['Alpha', 'Bravo'],
['中文', 'Charlie'],
['👩❤️👩', 'Delta']
])
Yields:
| Alpha | Bravo | | - | - | | 中文 | Charlie | | 👩❤️👩 | Delta |
With string-width
:
import stringWidth from 'string-width'
markdownTable(
[
['Alpha', 'Bravo'],
['中文', 'Charlie'],
['👩❤️👩', 'Delta']
],
{stringLength: width}
)
Yields:
| Alpha | Bravo |
| ----- | ------- |
| 中文 | Charlie |
| 👩❤️👩 | Delta |
Inspiration
The original idea and basic implementation was inspired by James Halliday’s
text-table
library.