UNPKG

terriajs

Version:

Geospatial data visualization platform.

56 lines 2 kB
import Resource from "terriajs-cesium/Source/Core/Resource"; import loadJson from "./loadJson"; import { ZipReader, BlobReader as ZipBlobReader, Data64URIWriter as ZipData64URIWriter, Uint8ArrayWriter as ZipUint8ArrayWriter } from "@zip.js/zip.js"; export default function loadBlob(urlOrResource, headers, body) { if (body !== undefined) { return Resource.post({ url: urlOrResource, headers: headers, data: JSON.stringify(body), responseType: "blob" }); } else { return Resource.fetchBlob({ url: urlOrResource, headers: headers }); } } export function isJson(uri) { return /(\.geojson)|(\.json)\b/i.test(uri); } export function isZip(uri) { return /(\.zip\b)/i.test(uri); } /** Get zipjs ZipReader for given Blob */ function getZipReader(blob) { return new ZipReader(new ZipBlobReader(blob)); } /** Parse zipped blob into JsonValue */ export async function parseZipJsonBlob(blob) { const reader = getZipReader(blob); return reader.getEntries().then(function (entries) { for (let i = 0; i < entries.length; i++) { const entry = entries[i]; if (isJson(entry.filename)) { return entry.getData(new ZipData64URIWriter()).then(function (uri) { return loadJson(uri); }); } } return undefined; }); } /** Parse zip Blob and return array of files (as UInt8Array) */ export async function parseZipArrayBuffers(blob) { const reader = getZipReader(blob); const entries = await reader.getEntries(); return await Promise.all(entries.map(async (entry) => { return entry.directory ? { fileName: entry.filename, isDirectory: true } : { fileName: entry.filename, isDirectory: false, data: await entry.getData(new ZipUint8ArrayWriter()) }; })); } //# sourceMappingURL=loadBlob.js.map