@opengis/fastify-table
Version:
core-plugins
41 lines (33 loc) • 1.88 kB
JavaScript
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 str = Object.keys(el).filter(el => el !== 'id').reduce((acc1, curr1) => handleData(el, curr1, acc1, {}, 1, 3), '');
return `\n - ${str}`;
}
return `\n - ${el}`;
})}`;
acc += `${str}`;
return acc;
} else 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, ',');
};