UNPKG

@dapplion/benchmark

Version:

Ensures that new code does not introduce performance regressions with CI. Tracks:

73 lines (72 loc) 2.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.readJson = readJson; exports.writeJson = writeJson; exports.fromCsv = fromCsv; exports.toCsv = toCsv; exports.toCsvMetadata = toCsvMetadata; const node_fs_1 = __importDefault(require("node:fs")); const sync_js_1 = __importDefault(require("csv-parse/lib/sync.js")); const sync_js_2 = __importDefault(require("csv-stringify/lib/sync.js")); function readJson(filepath) { const jsonStr = node_fs_1.default.readFileSync(filepath, "utf8"); let json; try { json = JSON.parse(jsonStr); } catch (e) { throw Error(`Error parsing JSON ${filepath}: ${e.message}`); } // TODO: Validate schema return json; } function writeJson(filepath, json) { const jsonStr = JSON.stringify(json, null, 2); node_fs_1.default.writeFileSync(filepath, jsonStr); } function fromCsv(str) { const { csv, metadata } = splitCsvMetadata(str); return { data: (0, sync_js_1.default)(csv, { columns: true, cast: true }), metadata, }; } function toCsv(data, metadata) { // Support Embedded Metadata https://www.w3.org/TR/tabular-data-model/#embedded-metadata const csv = (0, sync_js_2.default)(data, { header: true }); if (metadata) { const metadataStr = toCsvMetadata(metadata); return `${metadataStr}\n${csv}`; } else { return csv; } } // CSV metadata function toCsvMetadata(metadata) { return Object.entries(metadata) .map(([key, value]) => `#,${key},${value}`) .join("\n"); } /** * Embedded Metadata https://www.w3.org/TR/tabular-data-model/#embedded-metadata */ function splitCsvMetadata(str) { const metadata = {}; const rows = str.trim().split("\n"); let i = 0; for (i = 0; i < rows.length; i++) { const row = rows[i]; if (row.startsWith("#")) { const [key, value] = row.slice(2).split(","); metadata[key] = value; } else { break; } } return { csv: rows.slice(i).join("\n"), metadata }; }