Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/haltcase/tablemark
Generate markdown tables from JSON data.
https://github.com/haltcase/tablemark
array convert generate hacktoberfest json json-data markdown table typescript
Last synced: 18 days ago
JSON representation
Generate markdown tables from JSON data.
- Host: GitHub
- URL: https://github.com/haltcase/tablemark
- Owner: haltcase
- License: mit
- Created: 2017-01-22T20:30:57.000Z (almost 8 years ago)
- Default Branch: main
- Last Pushed: 2024-04-02T23:27:11.000Z (7 months ago)
- Last Synced: 2024-05-02T04:34:56.656Z (7 months ago)
- Topics: array, convert, generate, hacktoberfest, json, json-data, markdown, table, typescript
- Language: TypeScript
- Homepage:
- Size: 106 KB
- Stars: 75
- Watchers: 1
- Forks: 12
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- Changelog: changelog.md
- License: license
Awesome Lists containing this project
README
# tablemark · [![Version](https://flat.badgen.net/npm/v/tablemark)](https://www.npmjs.com/package/tablemark) [![License](https://flat.badgen.net/npm/license/tablemark)](https://www.npmjs.com/package/tablemark) [![TypeScript](https://flat.badgen.net/badge/written%20in/TypeScript/294E80)](http://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html) [![GitHub Actions](https://flat.badgen.net/github/checks/haltcase/tablemark)](https://github.com/haltcase/tablemark/actions)
> Generate markdown tables from JSON data.
Renders arrays of objects as markdown tables, complete with configuration
for renaming columns and left, center, or right-aligning them.## installation
```sh
yarn add tablemark# or
npm install tablemark
```## usage
```js
import tablemark from "tablemark"
``````js
tablemark([
{ name: "Bob", age: 21, isCool: false },
{ name: "Sarah", age: 22, isCool: true },
{ name: "Lee", age: 23, isCool: true }
])// | Name | Age | Is cool |
// | :---- | :---- | :------ |
// | Bob | 21 | false |
// | Sarah | 22 | true |
// | Lee | 23 | true |
```... displays as:
| Name | Age | Is cool |
| :---- | :---- | :------ |
| Bob | 21 | false |
| Sarah | 22 | true |
| Lee | 23 | true |## api
```ts
tablemark (input: InputData, options?: TablemarkOptions): string
```> **Arguments**
- `InputData` input: the data to table-ify
- an array of objects or iterables
- `TablemarkOptions` options:| key | type | default | description |
| :------------------: | :---------------------------------: | :--------: | --------------------------------------------------------------- |
| `columns` | `Array` | - | Array of column descriptors. |
| `caseHeaders` | `boolean` | `true` | Sentence case headers derived from keys. |
| `toCellText` | `(input: unknown) => string` | - | Provide a custom "toString" function. |
| `padHeaderSeparator` | `boolean` | `true` | Whether to pad gutters of the header separator (alignment) row. |
| `wrapWidth` | `number` | `Infinity` | Wrap cell text at this length. |
| `wrapWithGutters` | `boolean` | `false` | Add sides (`\| \|`) to wrapped rows. |
| `lineEnding` | `string` | `"\n"` | String used at end-of-line. |The `columns` array can either contain objects, in which case their
`name` and `align` properties will be used to alter the display of
the column in the table, or any other type which will be coerced
to a string if necessary and used as a replacement for the column
name.> **Returns**
`string`: the resulting markdown formatted table
> **Throws**
`TypeError`: when `input` is not iterable (e.g., an array)
`TypeError`: when an unknown column alignment option is provided### `options.columns`
```js
tablemark(
[
{ name: "Bob", age: 21, isCool: false },
{ name: "Sarah", age: 22, isCool: true },
{ name: "Lee", age: 23, isCool: true }
],
{
columns: [
"first name",
{ name: "how old", align: "center" },
"are they cool"
]
}
)// | first name | how old | are they cool |
// | :--------- | :-----: | :------------ |
// | Bob | 21 | false |
// | Sarah | 22 | true |
// | Lee | 23 | true |
```... displays as:
| first name | how old | are they cool |
| :--------- | :-----: | :------------ |
| Bob | 21 | false |
| Sarah | 22 | true |
| Lee | 23 | true |### `options.padHeaderSeparator`
```js
tablemark(
[
{ name: "Bob", age: 21, isCool: false },
{ name: "Sarah", age: 22, isCool: true },
{ name: "Lee", age: 23, isCool: true }
],
{
columns: [{ align: "left" }, { align: "center" }, { align: "right" }]
}
)// | first name | how old | are they cool |
// |:-----------|:-------:|--------------:|
// | Bob | 21 | false |
// | Sarah | 22 | true |
// | Lee | 23 | true |
```... displays as:
| first name | how old | are they cool |
|:-----------|:-------:|--------------:|
| Bob | 21 | false |
| Sarah | 22 | true |
| Lee | 23 | true |### `options.toCellText`
```js
tablemark(
[
{ name: "Bob", pet_owner: true, studying: false },
{ name: "Sarah", pet_owner: false, studying: true },
{ name: "Sarah", pet_owner: true, studying: true }
],
{
toCellText,
columns: [{ align: "left" }, { align: "center" }, { align: "center" }]
}
)function toCellText(v) {
if (v === true) return "✔"
if (!v) return ""
return v
}// | Name | Pet owner | Studying |
// | :---- | :-------: | :------: |
// | Bob | ✔︎ | |
// | Sarah | | ✔ |
// | Lee | ✔ | ✔ |
```### `options.wrapWidth`
Set `options.wrapWidth` to wrap any content at that length onto a new
adjacent line:```js
tablemark(
[
{ star: false, name: "Benjamin" },
{ star: true, name: "Jet Li" }
],
{ wrapWidth: 5 }
)// | Star | Name |
// | :---- | :---- |
// | false | Benja |
// min
// | true | Jet |
// Li
```> To output valid [GitHub Flavored Markdown](https://github.github.com/gfm/) a
> cell must not contain newlines. Consider replacing those with `
` (e.g.,
> using `options.toCellText`).### `options.wrapWithGutters`
Enable `wrapWithGutters` to add pipes on all lines:
```js
tablemark(
[
{ star: false, name: "Benjamin" },
{ star: true, name: "Jet Li" }
],
{ wrapWidth: 5, wrapWithGutters: true }
)// | Star | Name |
// | :---- | :---- |
// | false | Benja |
// | | min |
// | true | Jet |
// | | Li |
```## see also
- [`tablemark-cli`](https://github.com/haltcase/tablemark-cli) – use this module from the command line
## contributing
Search the [issues](https://github.com/haltcase/tablemark) if you come
across any trouble, open a new one if it hasn't been posted, or, if you're
able, open a [pull request](https://help.github.com/articles/about-pull-requests/).
Contributions of any kind are welcome in this project.The following people have already contributed their time and effort:
- Thomas Jensen (**[@tjconcept](https://github.com/tjconcept)**)
Thank you!
## license
MIT © Bo Lingen / haltcase