terriajs
Version:
Geospatial data visualization platform.
56 lines • 2 kB
JavaScript
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