@dpkit/zip
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
30 lines • 5.13 kB
JavaScript
import { createWriteStream } from "node:fs";
import { pipeline } from "node:stream/promises";
import { denormalizePackage, stringifyDescriptor } from "@dpkit/core";
import { assertLocalPathVacant, getPackageBasepath, readFileStream, saveResourceFiles, } from "@dpkit/file";
import { ZipFile } from "yazl";
export async function savePackageToZip(dataPackage, options) {
const { archivePath, withRemote } = options;
const basepath = getPackageBasepath(dataPackage);
await assertLocalPathVacant(archivePath);
const zipfile = new ZipFile();
const resourceDescriptors = [];
for (const resource of dataPackage.resources) {
resourceDescriptors.push(await saveResourceFiles(resource, {
basepath,
withRemote,
saveFile: async (props) => {
zipfile.addReadStream(await readFileStream(props.normalizedPath), props.denormalizedPath);
return props.denormalizedPath;
},
}));
}
const descriptor = {
...denormalizePackage(dataPackage, { basepath }),
resources: resourceDescriptors,
};
zipfile.addBuffer(Buffer.from(stringifyDescriptor({ descriptor })), "datapackage.json");
zipfile.end();
await pipeline(zipfile.outputStream, createWriteStream(archivePath));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2Uvc2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRS9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNyRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsaUJBQWlCLEdBQ2xCLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFOUIsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsV0FBb0IsRUFDcEIsT0FHQztJQUVELE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBQzNDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRWhELE1BQU0scUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtJQUU3QixNQUFNLG1CQUFtQixHQUFpQixFQUFFLENBQUE7SUFDNUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixNQUFNLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtZQUNoQyxRQUFRO1lBQ1IsVUFBVTtZQUNWLFFBQVEsRUFBRSxLQUFLLEVBQUMsS0FBSyxFQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxhQUFhLENBQ25CLE1BQU0sY0FBYyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFDMUMsS0FBSyxDQUFDLGdCQUFnQixDQUN2QixDQUFBO2dCQUVELE9BQU8sS0FBSyxDQUFDLGdCQUFnQixDQUFBO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRztRQUNqQixHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ2hELFNBQVMsRUFBRSxtQkFBbUI7S0FDL0IsQ0FBQTtJQUVELE9BQU8sQ0FBQyxTQUFTLENBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFDaEQsa0JBQWtCLENBQ25CLENBQUE7SUFFRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDYixNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIlxuaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yLCBQYWNrYWdlIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IGRlbm9ybWFsaXplUGFja2FnZSwgc3RyaW5naWZ5RGVzY3JpcHRvciB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQge1xuICBhc3NlcnRMb2NhbFBhdGhWYWNhbnQsXG4gIGdldFBhY2thZ2VCYXNlcGF0aCxcbiAgcmVhZEZpbGVTdHJlYW0sXG4gIHNhdmVSZXNvdXJjZUZpbGVzLFxufSBmcm9tIFwiQGRwa2l0L2ZpbGVcIlxuaW1wb3J0IHsgWmlwRmlsZSB9IGZyb20gXCJ5YXpsXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVQYWNrYWdlVG9aaXAoXG4gIGRhdGFQYWNrYWdlOiBQYWNrYWdlLFxuICBvcHRpb25zOiB7XG4gICAgYXJjaGl2ZVBhdGg6IHN0cmluZ1xuICAgIHdpdGhSZW1vdGU/OiBib29sZWFuXG4gIH0sXG4pIHtcbiAgY29uc3QgeyBhcmNoaXZlUGF0aCwgd2l0aFJlbW90ZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiYXNlcGF0aCA9IGdldFBhY2thZ2VCYXNlcGF0aChkYXRhUGFja2FnZSlcblxuICBhd2FpdCBhc3NlcnRMb2NhbFBhdGhWYWNhbnQoYXJjaGl2ZVBhdGgpXG4gIGNvbnN0IHppcGZpbGUgPSBuZXcgWmlwRmlsZSgpXG5cbiAgY29uc3QgcmVzb3VyY2VEZXNjcmlwdG9yczogRGVzY3JpcHRvcltdID0gW11cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBkYXRhUGFja2FnZS5yZXNvdXJjZXMpIHtcbiAgICByZXNvdXJjZURlc2NyaXB0b3JzLnB1c2goXG4gICAgICBhd2FpdCBzYXZlUmVzb3VyY2VGaWxlcyhyZXNvdXJjZSwge1xuICAgICAgICBiYXNlcGF0aCxcbiAgICAgICAgd2l0aFJlbW90ZSxcbiAgICAgICAgc2F2ZUZpbGU6IGFzeW5jIHByb3BzID0+IHtcbiAgICAgICAgICB6aXBmaWxlLmFkZFJlYWRTdHJlYW0oXG4gICAgICAgICAgICBhd2FpdCByZWFkRmlsZVN0cmVhbShwcm9wcy5ub3JtYWxpemVkUGF0aCksXG4gICAgICAgICAgICBwcm9wcy5kZW5vcm1hbGl6ZWRQYXRoLFxuICAgICAgICAgIClcblxuICAgICAgICAgIHJldHVybiBwcm9wcy5kZW5vcm1hbGl6ZWRQYXRoXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgIC4uLmRlbm9ybWFsaXplUGFja2FnZShkYXRhUGFja2FnZSwgeyBiYXNlcGF0aCB9KSxcbiAgICByZXNvdXJjZXM6IHJlc291cmNlRGVzY3JpcHRvcnMsXG4gIH1cblxuICB6aXBmaWxlLmFkZEJ1ZmZlcihcbiAgICBCdWZmZXIuZnJvbShzdHJpbmdpZnlEZXNjcmlwdG9yKHsgZGVzY3JpcHRvciB9KSksXG4gICAgXCJkYXRhcGFja2FnZS5qc29uXCIsXG4gIClcblxuICB6aXBmaWxlLmVuZCgpXG4gIGF3YWl0IHBpcGVsaW5lKHppcGZpbGUub3V0cHV0U3RyZWFtLCBjcmVhdGVXcml0ZVN0cmVhbShhcmNoaXZlUGF0aCkpXG59XG4iXX0=