markdown-tables-to-json
Advanced tools
Comparing version 0.1.5 to 0.1.6
@@ -8,3 +8,3 @@ "use strict"; | ||
return extendStatics(d, b); | ||
} | ||
}; | ||
return function (d, b) { | ||
@@ -17,7 +17,9 @@ extendStatics(d, b); | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Extractor = void 0; | ||
var marked_ts_1 = require("marked-ts"); | ||
var Extractor = (function (_super) { | ||
__extends(Extractor, _super); | ||
function Extractor(mode) { | ||
function Extractor(mode, lowercaseKeys) { | ||
var _this = _super.call(this) || this; | ||
_this.lowercaseKeys = lowercaseKeys !== null && lowercaseKeys !== void 0 ? lowercaseKeys : false; | ||
_this.reset(mode); | ||
@@ -28,3 +30,3 @@ return _this; | ||
get: function () { return this.extractedTables; }, | ||
enumerable: true, | ||
enumerable: false, | ||
configurable: true | ||
@@ -34,4 +36,7 @@ }); | ||
Object.defineProperty(Extractor.prototype, "objects", { | ||
get: function () { return this.extractedTables.map(function (table) { return Extractor.tableToObject(table); }); }, | ||
enumerable: true, | ||
get: function () { | ||
var _this = this; | ||
return this.extractedTables.map(function (table) { return Extractor.tableToObject(table, _this.lowercaseKeys); }); | ||
}, | ||
enumerable: false, | ||
configurable: true | ||
@@ -75,3 +80,3 @@ }); | ||
}; | ||
Extractor.tableToObject = function (table) { | ||
Extractor.tableToObject = function (table, lowercaseKeys) { | ||
var keys = table.shift().slice(1); | ||
@@ -83,10 +88,10 @@ var obj = {}; | ||
cells.forEach(function (cell, index) { | ||
rowObj[keys[index]] = cell; | ||
rowObj[lowercaseKeys ? keys[index].toLowerCase() : keys[index]] = cell; | ||
}); | ||
obj[rowName] = rowObj; | ||
obj[lowercaseKeys ? rowName.toLowerCase() : rowName] = rowObj; | ||
}); | ||
return obj; | ||
}; | ||
Extractor.createExtractor = function (markdown, mode) { | ||
var extractor = new Extractor(mode); | ||
Extractor.createExtractor = function (markdown, mode, lowercaseKeys) { | ||
var extractor = new Extractor(mode, lowercaseKeys); | ||
marked_ts_1.Marked.setOptions({ renderer: extractor }); | ||
@@ -96,24 +101,24 @@ marked_ts_1.Marked.parse(markdown); | ||
}; | ||
Extractor.extractObject = function (markdown, mode) { | ||
var objects = Extractor.extractAllObjects(markdown, mode); | ||
Extractor.extractObject = function (markdown, mode, lowercaseKeys) { | ||
var objects = Extractor.extractAllObjects(markdown, mode, lowercaseKeys); | ||
return objects.length > 0 ? objects[0] : null; | ||
}; | ||
Extractor.extractAllObjects = function (markdown, mode) { | ||
var extractor = Extractor.createExtractor(markdown, mode); | ||
Extractor.extractAllObjects = function (markdown, mode, lowercaseKeys) { | ||
var extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.objects; | ||
}; | ||
Extractor.extractTable = function (markdown, mode) { | ||
var tables = Extractor.extractAllTables(markdown, mode); | ||
Extractor.extractTable = function (markdown, mode, lowercaseKeys) { | ||
var tables = Extractor.extractAllTables(markdown, mode, lowercaseKeys); | ||
return tables.length > 0 ? tables[0] : null; | ||
}; | ||
Extractor.extractAllTables = function (markdown, mode) { | ||
var extractor = Extractor.createExtractor(markdown, mode); | ||
Extractor.extractAllTables = function (markdown, mode, lowercaseKeys) { | ||
var extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.tables; | ||
}; | ||
Extractor.extract = function (markdown, mode) { | ||
var extractor = Extractor.createExtractor(markdown, mode); | ||
Extractor.extract = function (markdown, mode, lowercaseKeys) { | ||
var extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.objects.length > 0 ? JSON.stringify(extractor.objects[0]) : null; | ||
}; | ||
Extractor.extractAll = function (markdown, mode) { | ||
var extractor = Extractor.createExtractor(markdown, mode); | ||
Extractor.extractAll = function (markdown, mode, lowercaseKeys) { | ||
var extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.objects.map(function (obj) { return JSON.stringify(obj); }); | ||
@@ -120,0 +125,0 @@ }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var _1 = require("."); | ||
var md_rows = "\n| name | head | body | tail | paws |\n|----------|-------|-------|-------|-------|\n| mittens | black | black | black | white |\n| dipstick | white | white | black | white |\n| snow | white | white | white | white |\n"; | ||
var md_cols = "\n| name | mittens | dipstick | snow |\n|------|---------|----------|-------|\n| head | black | white | white |\n| body | black | white | white |\n| tail | black | black | white |\n| paws | white | white | white |\n"; | ||
var md_rows = "\n| Name | Head | Body | Tail | Paws |\n|----------|-------|-------|-------|-------|\n| Mittens | BLACK | black | black | white |\n| Dipstick | white | white | black | white |\n| Snow | white | white | white | white |\n"; | ||
var md_cols = "\n| Name | Mittens | Dipstick | Snow |\n|------|---------|----------|-------|\n| Head | BLACK | white | white |\n| Body | black | white | white |\n| Tail | black | black | white |\n| Paws | white | white | white |\n"; | ||
var json_rows = _1.Extractor.extract(md_rows, 'rows'); | ||
@@ -7,0 +7,0 @@ var table_rows = _1.Extractor.extractTable(md_rows, 'rows'); |
{ | ||
"name": "markdown-tables-to-json", | ||
"version": "0.1.5", | ||
"version": "0.1.6", | ||
"description": "Extracts tables from Markdown documents and converts to JSON objects.", | ||
@@ -27,4 +27,4 @@ "main": "./dist/index.js", | ||
"tslint": "^5.11.0", | ||
"typescript": "^3.0.3" | ||
"typescript": "^3.9.7" | ||
} | ||
} |
@@ -16,22 +16,25 @@ # markdown-tables-to-json | ||
// markdown string with a row-oriented table | ||
var md_rows = ` | ||
| name | head | body | tail | paws | | ||
let md_rows = ` | ||
| Name | Head | Body | Tail | Paws | | ||
|----------|-------|-------|-------|-------| | ||
| mittens | black | black | black | white | | ||
| dipstick | white | white | black | white | | ||
| snow | white | white | white | white | | ||
| Mittens | BLACK | black | black | white | | ||
| Dipstick | white | white | black | white | | ||
| Snow | white | white | white | white | | ||
` | ||
// markdown string with a column-oriented table | ||
var md_cols = ` | ||
| name | mittens | dipstick | snow | | ||
let md_cols = ` | ||
| Name | Mittens | Dipstick | Snow | | ||
|------|---------|----------|-------| | ||
| head | black | white | white | | ||
| body | black | white | white | | ||
| tail | black | black | white | | ||
| paws | white | white | white | | ||
| Head | BLACK | white | white | | ||
| Body | black | white | white | | ||
| Tail | black | black | white | | ||
| Paws | white | white | white | | ||
` | ||
console.log(Extractor.extractObject(md_rows)); | ||
console.log(Extractor.extractObject(md_cols, 'columns')); | ||
// leave the case of the keys alone | ||
console.log(Extractor.extractObject(md_rows, 'rows', false)); | ||
// make all the keys lowercase | ||
console.log(Extractor.extractObject(md_cols, 'columns', true)); | ||
``` | ||
@@ -42,9 +45,12 @@ | ||
```javascript | ||
// unmodified case | ||
{ | ||
mittens: { head: 'black', body: 'black', tail: 'black', paws: 'white' }, | ||
dipstick: { head: 'white', body: 'white', tail: 'black', paws: 'white' }, | ||
snow: { head: 'white', body: 'white', tail: 'white', paws: 'white' } | ||
Mittens: { Head: 'BLACK', Body: 'black', Tail: 'black', Paws: 'white' }, | ||
Dipstick: { Head: 'white', Body: 'white', Tail: 'black', Paws: 'white' }, | ||
Snow: { Head: 'white', Body: 'white', Tail: 'white', Paws: 'white' } | ||
} | ||
// all keys lowercase | ||
{ | ||
mittens: { head: 'black', body: 'black', tail: 'black', paws: 'white' }, | ||
mittens: { head: 'BLACK', body: 'black', tail: 'black', paws: 'white' }, | ||
dipstick: { head: 'white', body: 'white', tail: 'black', paws: 'white' }, | ||
@@ -51,0 +57,0 @@ snow: { head: 'white', body: 'white', tail: 'white', paws: 'white' } |
@@ -34,2 +34,3 @@ /* | ||
mode: TableMode; | ||
lowercaseKeys: boolean; | ||
protected currentRow: string[]; | ||
@@ -40,3 +41,3 @@ protected currentTable: string[][]; | ||
get tables(): string[][][] { return this.extractedTables; }; | ||
get objects(): {}[] { return this.extractedTables.map(table => Extractor.tableToObject(table)); }; | ||
get objects(): {}[] { return this.extractedTables.map(table => Extractor.tableToObject(table, this.lowercaseKeys)); }; | ||
@@ -47,4 +48,5 @@ /** | ||
*/ | ||
constructor(mode?: TableMode) { | ||
constructor(mode?: TableMode, lowercaseKeys?: boolean) { | ||
super(); | ||
this.lowercaseKeys = lowercaseKeys ?? false; | ||
this.reset(mode); | ||
@@ -127,3 +129,3 @@ } | ||
*/ | ||
static tableToObject(table: string[][]): {} { | ||
static tableToObject(table: string[][], lowercaseKeys: boolean): {} { | ||
@@ -137,5 +139,5 @@ let keys: string[] = table.shift().slice(1); | ||
cells.forEach((cell, index) => { | ||
rowObj[keys[index]] = cell; | ||
rowObj[lowercaseKeys ? keys[index].toLowerCase() : keys[index]] = cell; | ||
}); | ||
obj[rowName] = rowObj; | ||
obj[lowercaseKeys ? rowName.toLowerCase() : rowName] = rowObj; | ||
}); | ||
@@ -153,4 +155,4 @@ | ||
*/ | ||
protected static createExtractor(markdown: string, mode?: TableMode): Extractor { | ||
let extractor = new Extractor(mode); | ||
protected static createExtractor(markdown: string, mode?: TableMode, lowercaseKeys?: boolean): Extractor { | ||
let extractor = new Extractor(mode, lowercaseKeys); | ||
Marked.setOptions({ renderer: extractor }); | ||
@@ -167,4 +169,4 @@ Marked.parse(markdown); | ||
*/ | ||
static extractObject(markdown: string, mode?: TableMode): {} { | ||
let objects = Extractor.extractAllObjects(markdown, mode); | ||
static extractObject(markdown: string, mode?: TableMode, lowercaseKeys?: boolean): {} { | ||
let objects = Extractor.extractAllObjects(markdown, mode, lowercaseKeys); | ||
return objects.length > 0 ? objects[0] : null; | ||
@@ -179,4 +181,4 @@ } | ||
*/ | ||
static extractAllObjects(markdown: string, mode?: TableMode): {}[] { | ||
let extractor = Extractor.createExtractor(markdown, mode); | ||
static extractAllObjects(markdown: string, mode?: TableMode, lowercaseKeys?: boolean): {}[] { | ||
let extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.objects; | ||
@@ -191,4 +193,4 @@ } | ||
*/ | ||
static extractTable(markdown: string, mode?: TableMode): string[][] { | ||
let tables = Extractor.extractAllTables(markdown, mode); | ||
static extractTable(markdown: string, mode?: TableMode, lowercaseKeys?: boolean): string[][] { | ||
let tables = Extractor.extractAllTables(markdown, mode, lowercaseKeys); | ||
return tables.length > 0 ? tables[0] : null; | ||
@@ -203,4 +205,4 @@ } | ||
*/ | ||
static extractAllTables(markdown: string, mode?: TableMode): string[][][] { | ||
let extractor = Extractor.createExtractor(markdown, mode); | ||
static extractAllTables(markdown: string, mode?: TableMode, lowercaseKeys?: boolean): string[][][] { | ||
let extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.tables; | ||
@@ -215,4 +217,4 @@ } | ||
*/ | ||
static extract(markdown: string, mode?: TableMode): string { | ||
let extractor = Extractor.createExtractor(markdown, mode); | ||
static extract(markdown: string, mode?: TableMode, lowercaseKeys?: boolean): string { | ||
let extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.objects.length > 0 ? JSON.stringify(extractor.objects[0]) : null; | ||
@@ -227,6 +229,6 @@ } | ||
*/ | ||
static extractAll(markdown: string, mode?: TableMode): string[] { | ||
let extractor = Extractor.createExtractor(markdown, mode); | ||
static extractAll(markdown: string, mode?: TableMode, lowercaseKeys?: boolean): string[] { | ||
let extractor = Extractor.createExtractor(markdown, mode, lowercaseKeys); | ||
return extractor.objects.map(obj => JSON.stringify(obj)); | ||
} | ||
} |
@@ -7,3 +7,3 @@ /* | ||
* Ian Cooper | ||
* 12 September 2018 | ||
* 31 December 2020 | ||
* | ||
@@ -17,7 +17,7 @@ */ | ||
let md_rows = ` | ||
| name | head | body | tail | paws | | ||
| Name | Head | Body | Tail | Paws | | ||
|----------|-------|-------|-------|-------| | ||
| mittens | black | black | black | white | | ||
| dipstick | white | white | black | white | | ||
| snow | white | white | white | white | | ||
| Mittens | BLACK | black | black | white | | ||
| Dipstick | white | white | black | white | | ||
| Snow | white | white | white | white | | ||
` | ||
@@ -27,8 +27,8 @@ | ||
let md_cols = ` | ||
| name | mittens | dipstick | snow | | ||
| Name | Mittens | Dipstick | Snow | | ||
|------|---------|----------|-------| | ||
| head | black | white | white | | ||
| body | black | white | white | | ||
| tail | black | black | white | | ||
| paws | white | white | white | | ||
| Head | BLACK | white | white | | ||
| Body | black | white | white | | ||
| Tail | black | black | white | | ||
| Paws | white | white | white | | ||
` | ||
@@ -35,0 +35,0 @@ |
21237
436
59