@dpkit/zip
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
30 lines • 4.37 kB
JavaScript
import { readFile, writeFile } from "node:fs/promises";
import { mkdir } from "node:fs/promises";
import { dirname, join } from "node:path";
import { loadPackageDescriptor } from "@dpkit/core";
import { getTempFolderPath } from "@dpkit/folder";
import { unzip } from "fflate";
export async function loadPackageFromZip(archivePath) {
const basepath = getTempFolderPath();
const zipData = await readFile(archivePath);
const entries = await new Promise((resolve, reject) => {
unzip(zipData, (err, unzipped) => {
if (err)
reject(err);
else
resolve(unzipped);
});
});
for (const [filename, data] of Object.entries(entries)) {
const path = join(basepath, filename);
if (filename.endsWith("/")) {
await mkdir(path, { recursive: true });
continue;
}
await mkdir(dirname(path), { recursive: true });
await writeFile(path, data);
}
const dataPackage = await loadPackageDescriptor(join(basepath, "datapackage.json"));
return dataPackage;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFOUIsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxXQUFtQjtJQUMxRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsRUFBRSxDQUFBO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRTNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQy9CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2xCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxHQUFHO2dCQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTs7Z0JBQ2YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUNGLENBQUE7SUFFRCxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFckMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDdEMsU0FBUTtRQUNWLENBQUM7UUFFRCxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0scUJBQXFCLENBQzdDLElBQUksQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FDbkMsQ0FBQTtJQUVELE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgbWtkaXIgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBsb2FkUGFja2FnZURlc2NyaXB0b3IgfSBmcm9tIFwiQGRwa2l0L2NvcmVcIlxuaW1wb3J0IHsgZ2V0VGVtcEZvbGRlclBhdGggfSBmcm9tIFwiQGRwa2l0L2ZvbGRlclwiXG5pbXBvcnQgeyB1bnppcCB9IGZyb20gXCJmZmxhdGVcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBhY2thZ2VGcm9tWmlwKGFyY2hpdmVQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgYmFzZXBhdGggPSBnZXRUZW1wRm9sZGVyUGF0aCgpXG4gIGNvbnN0IHppcERhdGEgPSBhd2FpdCByZWFkRmlsZShhcmNoaXZlUGF0aClcblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgbmV3IFByb21pc2U8UmVjb3JkPHN0cmluZywgVWludDhBcnJheT4+KFxuICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVuemlwKHppcERhdGEsIChlcnIsIHVuemlwcGVkKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpXG4gICAgICAgIGVsc2UgcmVzb2x2ZSh1bnppcHBlZClcbiAgICAgIH0pXG4gICAgfSxcbiAgKVxuXG4gIGZvciAoY29uc3QgW2ZpbGVuYW1lLCBkYXRhXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkge1xuICAgIGNvbnN0IHBhdGggPSBqb2luKGJhc2VwYXRoLCBmaWxlbmFtZSlcblxuICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGRhdGEpXG4gIH1cblxuICBjb25zdCBkYXRhUGFja2FnZSA9IGF3YWl0IGxvYWRQYWNrYWdlRGVzY3JpcHRvcihcbiAgICBqb2luKGJhc2VwYXRoLCBcImRhdGFwYWNrYWdlLmpzb25cIiksXG4gIClcblxuICByZXR1cm4gZGF0YVBhY2thZ2Vcbn1cbiJdfQ==