@dpkit/zip
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
32 lines • 4.55 kB
JavaScript
import { createWriteStream } from "node:fs";
import { mkdir, rm } from "node:fs/promises";
import { join } from "node:path";
import { pipeline } from "node:stream/promises";
import { loadPackageDescriptor } from "@dpkit/core";
import { temporaryDirectory } from "tempy";
import yauzl from "yauzl-promise";
export async function loadPackageFromZip(archivePath) {
const tempdir = temporaryDirectory();
const zipfile = await yauzl.open(archivePath);
try {
for await (const entry of zipfile) {
const path = join(tempdir, entry.filename);
if (entry.filename.endsWith("/")) {
await mkdir(path, { recursive: true });
continue;
}
const readStream = await entry.openReadStream();
const writeStream = createWriteStream(path);
await pipeline(readStream, writeStream);
}
}
finally {
await zipfile.close();
}
const dataPackage = await loadPackageDescriptor(join(tempdir, "dataPackage.json"));
const cleanup = async () => {
await rm(tempdir, { recursive: true, force: true });
};
return { dataPackage, cleanup };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQzFDLE9BQU8sS0FBSyxNQUFNLGVBQWUsQ0FBQTtBQUVqQyxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLFdBQW1CO0lBQzFELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixFQUFFLENBQUE7SUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRTdDLElBQUksQ0FBQztRQUNILElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRTFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7Z0JBQ3RDLFNBQVE7WUFDVixDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDL0MsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFM0MsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQ3pDLENBQUM7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLHFCQUFxQixDQUM3QyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQ2xDLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRTtRQUN6QixNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3JELENBQUMsQ0FBQTtJQUVELE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUE7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IHsgbWtkaXIsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIlxuaW1wb3J0IHsgbG9hZFBhY2thZ2VEZXNjcmlwdG9yIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IHRlbXBvcmFyeURpcmVjdG9yeSB9IGZyb20gXCJ0ZW1weVwiXG5pbXBvcnQgeWF1emwgZnJvbSBcInlhdXpsLXByb21pc2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBhY2thZ2VGcm9tWmlwKGFyY2hpdmVQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgdGVtcGRpciA9IHRlbXBvcmFyeURpcmVjdG9yeSgpXG4gIGNvbnN0IHppcGZpbGUgPSBhd2FpdCB5YXV6bC5vcGVuKGFyY2hpdmVQYXRoKVxuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiB6aXBmaWxlKSB7XG4gICAgICBjb25zdCBwYXRoID0gam9pbih0ZW1wZGlyLCBlbnRyeS5maWxlbmFtZSlcblxuICAgICAgaWYgKGVudHJ5LmZpbGVuYW1lLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBhd2FpdCBta2RpcihwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gYXdhaXQgZW50cnkub3BlblJlYWRTdHJlYW0oKVxuICAgICAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShwYXRoKVxuXG4gICAgICBhd2FpdCBwaXBlbGluZShyZWFkU3RyZWFtLCB3cml0ZVN0cmVhbSlcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgemlwZmlsZS5jbG9zZSgpXG4gIH1cblxuICBjb25zdCBkYXRhUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRGVzY3JpcHRvcihcbiAgICBqb2luKHRlbXBkaXIsIFwiZGF0YVBhY2thZ2UuanNvblwiKSxcbiAgKVxuXG4gIGNvbnN0IGNsZWFudXAgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcm0odGVtcGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4geyBkYXRhUGFja2FnZSwgY2xlYW51cCB9XG59XG4iXX0=