UNPKG

@latitude-data/query_result

Version:

A library for working with query results at Latitude

70 lines (67 loc) 1.78 kB
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 };