@sheetxl/io
Version:
IO - Import/Export Libraries for SheetXL.
79 lines (78 loc) • 3.1 kB
JavaScript
/**
* @license @sheetxl/io - IO - Import/Export Libraries for SheetXL. - v0.4.0
*
* (C) 2025-present SheetXL Inc. & Michael T. Ford
* License: The license can be found at https://www.sheetxl.com/license.
*/
import { Workbook as e } from "@sheetxl/sdk";
const t = async (e2, t2) => {
const n2 = await e2.toJSON(), r = t2?.whiteSpace ?? 0;
let o;
t2?.beforeWrite?.(e2, n2), o = 0 === r ? JSON.stringify(n2) : function(e3, t3 = 2) {
const n3 = [];
function r2(e4) {
const r3 = t3 * e4;
return void 0 === n3[r3] && (n3[r3] = " ".repeat(r3)), n3[r3];
}
return function e4(t4, n4, o2, i2) {
if (null == t4 || "object" != typeof t4) return JSON.stringify(t4);
const s2 = r2(n4), a = r2(n4 + 1);
if (Array.isArray(t4)) {
const r3 = t4.length;
if (0 === r3) return "[]";
if (0 !== o2) return JSON.stringify(t4);
let i3 = "[\n";
for (let s3 = 0; s3 < r3; s3++) i3 += a + e4(t4[s3], n4 + 1, o2 + 1, true), s3 < r3 - 1 && (i3 += ",\n");
return i3 += "\n" + s2 + "]", i3;
}
const f = Object.keys(t4), c = f.length;
if (0 === c) return "{}";
if (!(o2 < 2)) return JSON.stringify(t4);
let u = "{\n";
i2 || (o2 = 0);
for (let r3 = 0; r3 < c; r3++) {
const i3 = f[r3];
u += a + JSON.stringify(i3) + ": " + e4(t4[i3], n4 + 1, o2, false), r3 < c - 1 && (u += ",\n");
}
return u += "\n" + s2 + "}", u;
}(e3, 0, 0, false);
}(n2, r);
let i = new TextEncoder().encode(o).buffer;
const s = t2?.compress ?? true;
return s && (i = await async function(e3, t3 = "gzip") {
let n3;
e3 instanceof SharedArrayBuffer ? (n3 = new ArrayBuffer(e3.byteLength), new Uint8Array(n3).set(new Uint8Array(e3))) : n3 = e3;
const r2 = new ReadableStream({ start(e4) {
e4.enqueue(n3), e4.close();
} }), o2 = new CompressionStream(t3), i2 = r2.pipeThrough(o2);
return (await new Response(i2).blob()).arrayBuffer();
}(i, "string" == typeof s ? s : void 0)), i;
}, n = async (t2, n2) => {
let r = t2;
(function(e2) {
if (e2.byteLength < 4) return false;
const t3 = new Uint8Array(e2), n3 = { gzip: [31, 139], zip: [80, 75, 3, 4], bz2: [66, 90, 104], br: [206, 178, 207, 129] }, r2 = Object.keys(n3);
for (let e3 = 0; e3 < r2.length; e3++) {
const o2 = r2[e3], i2 = n3[o2];
let s2 = true;
for (let e4 = 0; e4 < i2.length; e4++) if (t3[e4] !== i2[e4]) {
s2 = false;
break;
}
if (s2) return o2;
}
return false;
})(r) && (r = await async function(e2, t3 = "gzip") {
let n3;
e2 instanceof SharedArrayBuffer ? (n3 = new ArrayBuffer(e2.byteLength), new Uint8Array(n3).set(new Uint8Array(e2))) : n3 = e2;
const r2 = new Blob([n3]).stream(), o2 = new DecompressionStream(t3), i2 = r2.pipeThrough(o2);
return (await new Response(i2).blob()).arrayBuffer();
}(r));
let o = new TextDecoder().decode(r);
const i = JSON.parse(o), s = { ...n2?.constructorOptions ?? {}, json: i };
return new e(s);
};
export {
n as fromBufferJSON,
t as toBufferJSON
};