@opengis/fastify-table
Version:
core-plugins
37 lines (32 loc) • 1.94 kB
JavaScript
import path from 'node:path';
import { mkdir, readFile, writeFile } from 'node:fs/promises';
export default async function convertJSONToCSV({
filePath, send = () => { }, delimiter = ';', colmodel = [], columnList = [],
}) {
const titles = colmodel.filter(el => columnList.includes(el.name)).reduce((acc, curr) => Object.assign(acc, { [curr.name]: curr.title || curr.ua }), {});
const rows = JSON.parse(await readFile(filePath) || '{}');
const orderedRows = rows.reduce((acc, curr) => {
const row = colmodel.filter(el => columnList.includes(el.name)).map(el => curr[el.name]);
acc.push(row);
return acc;
}, []);
const values = orderedRows.map((row) => Object.values(row).map((el) => {
if (Array.isArray(el) && el?.[0] && typeof el?.[0] === 'object') {
return `${JSON.stringify(el)};`;
}
if (Array.isArray(el) && el.length && typeof el?.[0] !== 'object') {
return `${el.join(',')};`;
}
if (typeof el === 'object') {
return Object.keys(el || {}).length ? `${JSON.stringify(el)};` : ';';
}
return `${el || ''};`;
}));
values.unshift(colmodel.filter(el => columnList.includes(el.name)).map((el) => `${titles[el.name] || el.name};`));
send('Конвертація успішно завершена. Формування файлу...');
await mkdir(path.dirname(filePath), { recursive: true });
await writeFile(filePath.replace('.json', '.csv'), `\ufeff${values.join('\n').replace(/;,/g, delimiter).replace(/null/g, '').replace(/undefined/g, '')}`, 'utf8');
// send('Файл успішно сформовано. Оновіть сторінку або натисніть кнопку ще раз для завантаження. ', 1);
// return { message: 'Файл успішно сформовано. Натистіть кнопку ще раз для завантаження даних', status: 200 };
return null;
}