UNPKG

csv-to-markdown-table

Version:

JavaScript/Node.js Csv to Markdown Table Converter

79 lines (77 loc) 2.66 kB
"use strict"; if (typeof exports == "undefined") { var exports = {}; } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = csvToMarkdown; /** * Converts CSV to Markdown Table * * @param {string} csvContent - The string content of the CSV * @param {string} delimiter - The character(s) to use as the CSV column delimiter * @param {boolean} hasHeader - Whether to use the first row of Data as headers * @returns {string} */ function csvToMarkdown(csvContent, delimiter, hasHeader) { if (delimiter === void 0) { delimiter = "\t"; } if (hasHeader === void 0) { hasHeader = false; } if (delimiter != "\t") { csvContent = csvContent.replace(/\t/g, " "); } var columns = csvContent.split(/\r?\n/); var tabularData = []; var maxRowLen = []; var regsafeDelimiter = delimiter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); var regex = new RegExp("".concat(regsafeDelimiter, "(?![^\"]*\"(?:$|").concat(regsafeDelimiter, "))")); columns.forEach(function (e, i) { if (typeof tabularData[i] == "undefined") { tabularData[i] = []; } var row = e.split(regex); row.forEach(function (ee, ii) { if (typeof maxRowLen[ii] == "undefined") { maxRowLen[ii] = 0; } // escape pipes and backslashes ee = ee.replace(/(\||\\)/g, "\\$1"); maxRowLen[ii] = Math.max(maxRowLen[ii], ee.length); tabularData[i][ii] = ee; }); }); var headerOutput = ""; var seperatorOutput = ""; maxRowLen.forEach(function (len) { var sizer = Array(len + 1 + 2); seperatorOutput += "|" + sizer.join("-"); headerOutput += "|" + sizer.join(" "); }); headerOutput += "| \n"; seperatorOutput += "| \n"; if (hasHeader) { headerOutput = ""; } var rowOutput = ""; tabularData.forEach(function (col, i) { maxRowLen.forEach(function (len, y) { var row = typeof col[y] == "undefined" ? "" : col[y]; var spacing = Array((len - row.length) + 1).join(" "); var out = "| ".concat(row).concat(spacing, " "); if (hasHeader && i === 0) { headerOutput += out; } else { rowOutput += out; } }); if (hasHeader && i === 0) { headerOutput += "| \n"; } else { rowOutput += "| \n"; } }); return "".concat(headerOutput).concat(seperatorOutput).concat(rowOutput); } if (typeof module != "undefined") { module.exports = csvToMarkdown; }