tdast utility to transform tdast to a hast table node.
npm install tdast-util-to-hast-table
Given a tdast table node,
const tdast = {
type: 'table',
children: [
{
type: 'row',
index: 0,
children: [
{
type: 'column',
index: 0,
value: 'col0',
},
{
type: 'column',
index: 1,
value: 'col1',
},
{
type: 'column',
index: 2,
value: 'col2',
},
],
},
{
type: 'row',
index: 1,
children: [
{
type: 'cell',
columnIndex: 0,
rowIndex: 1,
value: 'row1col0',
},
{
type: 'cell',
columnIndex: 1,
rowIndex: 1,
value: 'row1col1',
},
{
type: 'cell',
columnIndex: 2,
rowIndex: 1,
value: 'row1col2',
},
],
},
{
type: 'row',
index: 2,
children: [
{
type: 'cell',
columnIndex: 0,
rowIndex: 2,
value: 'row2col0',
},
{
type: 'cell',
columnIndex: 1,
rowIndex: 2,
value: 'row2col1',
},
{
type: 'cell',
columnIndex: 2,
rowIndex: 2,
value: 'row2col2',
},
],
},
],
};
transform into a compatible hast table node:
import toHastTable from 'tdast-util-to-hast-table';
expect(toHastTable(tdast)).toEqual({
type: 'element',
tagName: 'table',
properties: {},
children: [
{
type: 'element',
tagName: 'thead',
properties: {},
children: [
{
type: 'element',
tagName: 'tr',
properties: {},
children: [
{
type: 'element',
tagName: 'th',
properties: {},
children: [
{
type: 'text',
value: 'col0',
},
],
},
{
type: 'element',
tagName: 'th',
properties: {},
children: [
{
type: 'text',
value: 'col1',
},
],
},
{
type: 'element',
tagName: 'th',
properties: {},
children: [
{
type: 'text',
value: 'col2',
},
],
},
],
},
],
},
{
type: 'element',
tagName: 'tbody',
properties: {},
children: [
{
type: 'element',
tagName: 'tr',
properties: {},
children: [
{
type: 'element',
tagName: 'td',
properties: {},
children: [
{
type: 'text',
value: 'row1col0',
},
],
},
{
type: 'element',
tagName: 'td',
properties: {},
children: [
{
type: 'text',
value: 'row1col1',
},
],
},
{
type: 'element',
tagName: 'td',
properties: {},
children: [
{
type: 'text',
value: 'row1col2',
},
],
},
],
},
{
type: 'element',
tagName: 'tr',
properties: {},
children: [
{
type: 'element',
tagName: 'td',
properties: {},
children: [
{
type: 'text',
value: 'row2col0',
},
],
},
{
type: 'element',
tagName: 'td',
properties: {},
children: [
{
type: 'text',
value: 'row2col1',
},
],
},
{
type: 'element',
tagName: 'td',
properties: {},
children: [
{
type: 'text',
value: 'row2col2',
},
],
},
],
},
],
},
],
});
function toHastTable(
/** a valid tdast Table node */
tdast: Table,
/** configurable options */
options?: Options,
): Hast;
Transforms a tdast Table
node into a hast table node. A summary of transformation behaviors is listed below:
hast.table
fromtdast.Table
hast.tr
fromtdast.Row
hast.th
fromtdast.Column
hast.td
fromtdast.Cell
hast.thead
from infering iftdast.Row
has column nodes, and assigns the firsthast.tr
node inhast.thead
.hast.tbody
from rendering alltdast.Row
that do not have column nodes ashast.tr
nodes inhast.tbody
.
Unist properties such as data
and position
is copied over during the transformation, which allows for useful manipulation in hast.
It is convenient to use tdastscript to create tdast trees, and tdast-util-to-hast-table
will transform them into compatible hast trees created through hastscript, as shown in the example below:
import h from 'hastscript';
import td from 'tdastscript';
import toHastTable from 'tdast-util-to-hast-table';
const tdast = td('table', [
td('row', [
td('column', 'col0'),
td('column', 'col1'),
td('column', 'col2'),
]),
td('row', ['row1col0', 'row1col1', 'row1col2']),
td('row', ['row2col0', 'row2col1', 'row2col2']),
]);
expect(toHastTable(tdast)).toEqual(
h('table', [
h('thead', [
h('tr', [h('th', 'col0'), h('th', 'col1'), h('th', 'col2')]),
]),
h('tbody', [
h('tr', [
h('td', 'row1col0'),
h('td', 'row1col1'),
h('td', 'row1col2'),
]),
h('tr', [
h('td', 'row2col0'),
h('td', 'row2col1'),
h('td', 'row2col2'),
]),
]),
]),
);
interface Options {
/** use the `label` property of a tdast `Column` node for the text value of a hast thead node. */
useColumnLabel?: boolean;
}