import fs from 'node:fs'; import zlib from 'node:zlib'; import color from 'chalk'; const data = fs.readFileSync('data/products.csv', 'utf-8'); const toCamelCase = (str) => { return str .trim() .toLowerCase() .replace(/[^a-zA-Z0-9]+(.)/g, (match, chr) => chr.toUpperCase()); }; const convertCsvToJson = (products, ar) => { const resultAr = products.map((str) => { const fields = str.split(/\s*,\s*/); const labels = ar.map((label, idx) => { return [label, isNaN(fields[idx]) ? fields[idx] : Number(fields[idx])]; }); const obj = Object.fromEntries(labels); // console.log(labels); // Entries Array //console.log(obj); return obj; // return { // [ar[0]]: fields[0], // [ar[1]]: fields[1], // [ar[2]]: fields[2], // [ar[3]]: Number(fields[3]), // [ar[4]]: Number(fields[4]), // }; }); // console.log(resultAr); const jsonStr = JSON.stringify(resultAr, '', 2); fs.writeFile('products.json.gz', zlib.gzipSync(jsonStr), 'utf-8', (err) => { if (err) { console.log(err); } else { console.log(color.green('file created!')); } }); }; const productAr = data .split('\n') .map((row) => row.replace('\n', '')) .filter((row) => row !== ''); const headerAr = productAr .shift() .split(/\s*,\s*/) .map(toCamelCase); // console.log('======='); // console.log(productAr); convertCsvToJson(productAr, headerAr);