unified

Project: unified-doc/unified-doc

Package: unified-doc-parse-csv@0.2.1

  1. Dependencies: 2·Dependents: 1
  2. unified-doc parser to parse csv into a hast table node (RFC-4180 compliant)
  1. unified 154
  2. unist 110
  3. html 110
  4. hast 61
  5. file 32
  6. parse 22
  7. content 17
  8. table 12
  9. document 11
  10. doc 8

unified-doc-parse-csv

unified-doc parser to parse csv content into a hast table node (RFC-4180 compliant).

Install

npm install unified-doc-parse-csv

Use

Given some RFC-4180 compliant CSV content, parse into a hast table with semantic table, tbody, tr, td nodes

import csv from "unified-doc-parse-csv";
import unified from "unified";

const content = 'row0col0,row0col1,row0col2\nrow1col0,row1col1,row1col2';

const processor = unified().use(csv);

expect(processor.parse(content)).toEqual({
  type: 'element',
  tagName: 'table',
  properties: {},
  children: [
    {
      type: 'element',
      tagName: 'tbody',
      properties: {},
      children: [
        {
          type: 'element',
          tagName: 'tr',
          properties: {},
          children: [
            {
              type: 'element',
              tagName: 'td',
              properties: {},
              children: [
                {
                  type: 'text',
                  value: 'row0col0',
                  position: {
                    start: {
                      line: 1,
                      column: 1,
                      offset: 0,
                    },
                    end: {
                      line: 1,
                      column: 9,
                      offset: 8,
                    },
                  },
                },
              ],
              position: {
                start: {
                  line: 1,
                  column: 1,
                  offset: 0,
                },
                end: {
                  line: 1,
                  column: 9,
                  offset: 8,
                },
              },
            },
            {
              type: 'element',
              tagName: 'td',
              properties: {},
              children: [
                {
                  type: 'text',
                  value: 'row0col1',
                  position: {
                    start: {
                      line: 1,
                      column: 10,
                      offset: 9,
                    },
                    end: {
                      line: 1,
                      column: 18,
                      offset: 17,
                    },
                  },
                },
              ],
              position: {
                start: {
                  line: 1,
                  column: 10,
                  offset: 9,
                },
                end: {
                  line: 1,
                  column: 18,
                  offset: 17,
                },
              },
            },
            {
              type: 'element',
              tagName: 'td',
              properties: {},
              children: [
                {
                  type: 'text',
                  value: 'row0col2',
                  position: {
                    start: {
                      line: 1,
                      column: 19,
                      offset: 18,
                    },
                    end: {
                      line: 1,
                      column: 27,
                      offset: 26,
                    },
                  },
                },
              ],
              position: {
                start: {
                  line: 1,
                  column: 19,
                  offset: 18,
                },
                end: {
                  line: 1,
                  column: 27,
                  offset: 26,
                },
              },
            },
          ],
          position: {
            start: {
              line: 1,
              column: 1,
              offset: 0,
            },
            end: {
              line: 1,
              column: 27,
              offset: 26,
            },
          },
        },
        {
          type: 'element',
          tagName: 'tr',
          properties: {},
          children: [
            {
              type: 'element',
              tagName: 'td',
              properties: {},
              children: [
                {
                  type: 'text',
                  value: 'row1col0',
                  position: {
                    start: {
                      line: 2,
                      column: 1,
                      offset: 27,
                    },
                    end: {
                      line: 2,
                      column: 9,
                      offset: 35,
                    },
                  },
                },
              ],
              position: {
                start: {
                  line: 2,
                  column: 1,
                  offset: 27,
                },
                end: {
                  line: 2,
                  column: 9,
                  offset: 35,
                },
              },
            },
            {
              type: 'element',
              tagName: 'td',
              properties: {},
              children: [
                {
                  type: 'text',
                  value: 'row1col1',
                  position: {
                    start: {
                      line: 2,
                      column: 10,
                      offset: 36,
                    },
                    end: {
                      line: 2,
                      column: 18,
                      offset: 44,
                    },
                  },
                },
              ],
              position: {
                start: {
                  line: 2,
                  column: 10,
                  offset: 36,
                },
                end: {
                  line: 2,
                  column: 18,
                  offset: 44,
                },
              },
            },
            {
              type: 'element',
              tagName: 'td',
              properties: {},
              children: [
                {
                  type: 'text',
                  value: 'row1col2',
                  position: {
                    start: {
                      line: 2,
                      column: 19,
                      offset: 45,
                    },
                    end: {
                      line: 2,
                      column: 27,
                      offset: 53,
                    },
                  },
                },
              ],
              position: {
                start: {
                  line: 2,
                  column: 19,
                  offset: 45,
                },
                end: {
                  line: 2,
                  column: 27,
                  offset: 53,
                },
              },
            },
          ],
          position: {
            start: {
              line: 2,
              column: 1,
              offset: 27,
            },
            end: {
              line: 2,
              column: 27,
              offset: 53,
            },
          },
        },
      ],
    },
  ],
  position: {
    start: {
      line: 1,
      column: 1,
      offset: 0,
    },
    end: {
      line: 2,
      column: 27,
      offset: 53,
    },
  },
});

API

unified().use(content[, options])

Interface

function parse(
  /** Configurable options (compatible with tdast-util-from-csv's options) */
  options?: Options
): void;

hast parser to parse csv content into a hast table node (RFC-4180 compliant).

Use the parser with any unified processor. Implemented with tdast-util-from-csv and tdast-util-to-hast-table.

interface Options {
  // if the first row of the CSV contains header values
  header?: boolean;
}