2024-01-05 09:39:59 +00:00
|
|
|
/**
|
|
|
|
|
* Replace bigints with numbers.
|
|
|
|
|
* When parsing parquet files, bigints are used to represent 64-bit integers.
|
|
|
|
|
* However, JSON does not support bigints, so it's helpful to convert to numbers.
|
|
|
|
|
*
|
|
|
|
|
* @param {any} obj object to convert
|
|
|
|
|
* @returns {unknown} converted object
|
|
|
|
|
*/
|
|
|
|
|
export function toJson(obj) {
|
2024-02-14 05:11:34 +00:00
|
|
|
if (obj === undefined) return null
|
|
|
|
|
if (typeof obj === 'bigint') return Number(obj)
|
|
|
|
|
if (Array.isArray(obj)) return obj.map(toJson)
|
2024-05-04 07:38:19 +00:00
|
|
|
if (obj instanceof Uint8Array) return Array.from(obj)
|
2024-02-14 05:11:34 +00:00
|
|
|
if (obj instanceof Object) {
|
2024-01-05 09:39:59 +00:00
|
|
|
/** @type {Record<string, unknown>} */
|
|
|
|
|
const newObj = {}
|
|
|
|
|
for (const key of Object.keys(obj)) {
|
2024-02-14 05:25:40 +00:00
|
|
|
if (obj[key] === undefined) continue
|
2024-01-05 09:39:59 +00:00
|
|
|
newObj[key] = toJson(obj[key])
|
|
|
|
|
}
|
|
|
|
|
return newObj
|
|
|
|
|
}
|
2024-02-14 05:11:34 +00:00
|
|
|
return obj
|
2024-01-05 09:39:59 +00:00
|
|
|
}
|
2024-04-07 16:33:57 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Concatenate two arrays fast.
|
2024-05-02 06:23:50 +00:00
|
|
|
*
|
|
|
|
|
* @typedef {import('./types.js').DecodedArray} DecodedArray
|
2024-04-07 16:33:57 +00:00
|
|
|
* @param {any[]} aaa first array
|
2024-05-02 06:23:50 +00:00
|
|
|
* @param {DecodedArray} bbb second array
|
2024-04-07 16:33:57 +00:00
|
|
|
*/
|
|
|
|
|
export function concat(aaa, bbb) {
|
|
|
|
|
const chunk = 10000
|
|
|
|
|
for (let i = 0; i < bbb.length; i += chunk) {
|
|
|
|
|
aaa.push(...bbb.slice(i, i + chunk))
|
|
|
|
|
}
|
|
|
|
|
}
|