@opengis/fastify-table
Version:
core-plugins
46 lines (45 loc) • 1.98 kB
JavaScript
/* eslint-disable no-param-reassign */
function handleData(data, curr, acc, titles, plain, splittype = 1) {
const titleStr = {
1: `${titles?.[curr] || curr}\n`, // for lists
2: `${titles?.[curr] || curr}: `, // one-liner
3: "", // for nested lists w/ one property
}[splittype];
if (Array.isArray(data[curr])) {
const str = `${plain ? "" : "\n\n### "}${titleStr}${data[curr].map((el) => {
if (typeof el === "object" && !Array.isArray(el)) {
const str1 = Object.keys(el)
.filter((item) => item !== "id")
.reduce((acc1, curr1) => handleData(el, curr1, acc1, {}, 1, 3), "");
return `\n - ${str1}`;
}
return `\n - ${el}`;
})}`;
acc += `${str}`;
return acc;
}
if (typeof data[curr] === "object") {
const str = `${plain ? "" : "\n\n### "} ${titleStr}${JSON.stringify(data[curr])}`;
acc += str;
return acc;
}
acc += `${plain ? "" : "\n\n### "}${titleStr}${data[curr] || ""}`;
return acc;
}
export default function formatMdoc(data, titles = {}, headerColumns = [], descriptionColumns = []) {
if (!data)
return "empty data";
if (typeof data !== "object" || Array.isArray(data))
return "invalid data";
if (headerColumns && !Array.isArray(headerColumns))
return "invalid headerColumns";
if (descriptionColumns && !Array.isArray(descriptionColumns))
return "invalid descriptionColumns";
const header = Object.keys(data)
.filter((key) => headerColumns.includes(key) && data[key])
.reduce((acc, curr) => handleData(data, curr, acc, titles, 1, 2), "");
const description = Object.keys(data)
.filter((key) => descriptionColumns.includes(key) && data[key])
.reduce((acc, curr) => handleData(data, curr, acc, titles), "");
return `---\n${header}\n---${description}`.replace(/,,/g, ",");
}