UNPKG

@dpkit/zip

Version:

Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames

32 lines 4.55 kB
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=