@dapplion/benchmark
Version:
Ensures that new code does not introduce performance regressions with CI. Tracks:
73 lines (72 loc) • 2.23 kB
JavaScript
;
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 };
}