@latitude-data/query_result
Version:
A library for working with query results at Latitude
70 lines (67 loc) • 1.78 kB
JavaScript
import { json2csv } from 'json-2-csv';
var DataType;
(function (DataType) {
DataType["Boolean"] = "boolean";
DataType["Datetime"] = "datetime";
DataType["Float"] = "float";
DataType["Integer"] = "integer";
DataType["Null"] = "null";
DataType["String"] = "string";
DataType["Unknown"] = "unknown";
})(DataType || (DataType = {}));
class QueryResult {
fields;
rowCount;
rows;
static fromJSON(json) {
const { fields, rows, rowCount } = JSON.parse(json);
return new QueryResult({
fields,
rows,
rowCount,
});
}
constructor({ fields = [], rowCount = 0, rows = [] }) {
this.fields = fields;
this.rowCount = rowCount;
this.rows = rows;
}
serialize() {
return {
fields: this.fields,
rowCount: this.rowCount,
rows: this.rows,
};
}
toJSON() {
const { fields, rows, rowCount } = this.serialize();
return JSON.stringify({
fields,
rows: rows.map((row) => row.map(this.serializeValue)),
rowCount,
});
}
toCSV() {
const arr = this.toArray();
return json2csv(arr, {
keys: arr[0] ? Object.keys(arr[0]) : [],
expandArrayObjects: false,
expandNestedObjects: false,
});
}
toArray() {
return this.rows.map((row) => row.reduce((acc, value, i) => {
acc[this.fields[i].name] = value;
return acc;
}, {}));
}
serializeValue(value) {
if (typeof value === 'bigint') {
return Number(value);
}
else {
return value;
}
}
}
export { DataType, QueryResult as default };