// Created on savesnippets.com ยท https://savesnippets.com/6CG43NR4au7pli function downloadBlob(blob, filename) { const url = URL.createObjectURL(blob); const a = Object.assign(document.createElement('a'), { href: url, download: filename }); document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(() => URL.revokeObjectURL(url), 10_000); } // Convenience wrappers const downloadJSON = (data, filename = 'export.json') => downloadBlob(new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }), filename); const downloadCSV = (rows, filename = 'export.csv') => { const csv = rows.map((r) => r.map((c) => `"${String(c).replace(/"/g, '""')}"`).join(',')).join('\n'); downloadBlob(new Blob([csv], { type: 'text/csv' }), filename); }; // Usage downloadJSON({ users: [{ id: 1, name: 'Alice' }] }, 'users.json'); downloadCSV([['Name', 'Age'], ['Alice', 30], ['Bob', 25]], 'people.csv');