mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
* Add a zig fmt action * add failing file * Setup prettier better * Update prettier-fmt.yml * Fail on error * Update prettier-fmt.yml * boop * boop2 * tar.gz * Update zig-fmt.yml * Update zig-fmt.yml * Update zig-fmt.yml * Update zig-fmt.yml * Update zig-fmt.yml * boop * Update prettier-fmt.yml * tag * newlines * multiline * fixup * Update zig-fmt.yml * update it * fixup * both * w * Update prettier-fmt.yml * prettier all the things * Update package.json * zig fmt * ❌ ✅ * bump * . * quotes * fix prettier ignore * once more * Update prettier-fmt.yml * Update fallback.ts * consistentcy --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import Pappa from "papaparse";
|
|
// Example usage:
|
|
// const rows = fetchCSV(
|
|
// "https://covid19.who.int/WHO-COVID-19-global-data.csv",
|
|
// {
|
|
// last: 100,
|
|
// columns: ["New_cases", "Date_reported", "Country"],
|
|
// }
|
|
// );
|
|
export async function fetchCSV(callExpression) {
|
|
console.time("fetchCSV Total");
|
|
const [
|
|
urlNode,
|
|
{
|
|
properties: { last: limit = 10, columns = [] },
|
|
},
|
|
] = callExpression.arguments;
|
|
const url = urlNode.get();
|
|
|
|
console.time("Fetch");
|
|
const response = await fetch(url);
|
|
const csvText = await response.text();
|
|
console.timeEnd("Fetch");
|
|
|
|
console.time("Parse");
|
|
let rows = Pappa.parse(csvText, { fastMode: true }).data;
|
|
console.timeEnd("Parse");
|
|
|
|
console.time("Render");
|
|
const columnIndices = new Array(columns.length);
|
|
|
|
for (let i = 0; i < columns.length; i++) {
|
|
columnIndices[i] = rows[0].indexOf(columns[i]);
|
|
}
|
|
|
|
rows = rows
|
|
.slice(Math.max(limit, rows.length) - limit)
|
|
.reverse()
|
|
.filter(columns => columns.every(Boolean));
|
|
const value = (
|
|
<array>
|
|
{rows.map(columns => (
|
|
<array>
|
|
{columnIndices.map(columnIndex => (
|
|
<string value={columns[columnIndex]} />
|
|
))}
|
|
</array>
|
|
))}
|
|
</array>
|
|
);
|
|
console.timeEnd("Render");
|
|
console.timeEnd("fetchCSV Total");
|
|
return value;
|
|
}
|