@dpkit/zip
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
47 lines • 6.75 kB
JavaScript
import { Buffer } from "node:buffer";
import { writeFile } from "node:fs/promises";
import { convertPackageToDescriptor, stringifyDescriptor } from "@dpkit/core";
import { loadFileStream, saveResourceFiles } from "@dpkit/file";
import { assertLocalPathVacant, getPackageBasepath } from "@dpkit/file";
import { zip } from "fflate";
export async function savePackageToZip(dataPackage, options) {
const { archivePath, withRemote } = options;
const basepath = getPackageBasepath(dataPackage);
await assertLocalPathVacant(archivePath);
const files = {};
const resourceDescriptors = [];
for (const resource of dataPackage.resources) {
resourceDescriptors.push(await saveResourceFiles(resource, {
basepath,
withRemote,
saveFile: async (options) => {
const stream = await loadFileStream(options.normalizedPath);
const buffer = await streamToBuffer(stream);
files[options.denormalizedPath] = buffer;
return options.denormalizedPath;
},
}));
}
const descriptor = {
...convertPackageToDescriptor(dataPackage, { basepath }),
resources: resourceDescriptors,
};
files["datapackage.json"] = Buffer.from(stringifyDescriptor(descriptor));
const zipData = await new Promise((resolve, reject) => {
zip(files, (err, data) => {
if (err)
reject(err);
else
resolve(data);
});
});
await writeFile(archivePath, zipData);
}
async function streamToBuffer(stream) {
const chunks = [];
for await (const chunk of stream) {
chunks.push(chunk);
}
return Buffer.concat(chunks);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2Uvc2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUc1QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUU1QixNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxXQUFvQixFQUNwQixPQUdDO0lBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDM0MsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFaEQsTUFBTSxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN4QyxNQUFNLEtBQUssR0FBK0IsRUFBRSxDQUFBO0lBRTVDLE1BQU0sbUJBQW1CLEdBQWlCLEVBQUUsQ0FBQTtJQUM1QyxLQUFLLE1BQU0sUUFBUSxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLE1BQU0saUJBQWlCLENBQUMsUUFBUSxFQUFFO1lBQ2hDLFFBQVE7WUFDUixVQUFVO1lBQ1YsUUFBUSxFQUFFLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtnQkFFeEMsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLENBQUE7WUFDakMsQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEdBQUcsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDeEQsU0FBUyxFQUFFLG1CQUFtQjtLQUMvQixDQUFBO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBRXhFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDaEUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN2QixJQUFJLEdBQUc7Z0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBOztnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDcEIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN2QyxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUFnQjtJQUM1QyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFBO0lBQy9CLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIm5vZGU6YnVmZmVyXCJcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB0eXBlIHsgUmVhZGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIlxuaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yLCBQYWNrYWdlIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IGNvbnZlcnRQYWNrYWdlVG9EZXNjcmlwdG9yLCBzdHJpbmdpZnlEZXNjcmlwdG9yIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IGxvYWRGaWxlU3RyZWFtLCBzYXZlUmVzb3VyY2VGaWxlcyB9IGZyb20gXCJAZHBraXQvZmlsZVwiXG5pbXBvcnQgeyBhc3NlcnRMb2NhbFBhdGhWYWNhbnQsIGdldFBhY2thZ2VCYXNlcGF0aCB9IGZyb20gXCJAZHBraXQvZmlsZVwiXG5pbXBvcnQgeyB6aXAgfSBmcm9tIFwiZmZsYXRlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVQYWNrYWdlVG9aaXAoXG4gIGRhdGFQYWNrYWdlOiBQYWNrYWdlLFxuICBvcHRpb25zOiB7XG4gICAgYXJjaGl2ZVBhdGg6IHN0cmluZ1xuICAgIHdpdGhSZW1vdGU/OiBib29sZWFuXG4gIH0sXG4pIHtcbiAgY29uc3QgeyBhcmNoaXZlUGF0aCwgd2l0aFJlbW90ZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiYXNlcGF0aCA9IGdldFBhY2thZ2VCYXNlcGF0aChkYXRhUGFja2FnZSlcblxuICBhd2FpdCBhc3NlcnRMb2NhbFBhdGhWYWNhbnQoYXJjaGl2ZVBhdGgpXG4gIGNvbnN0IGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBVaW50OEFycmF5PiA9IHt9XG5cbiAgY29uc3QgcmVzb3VyY2VEZXNjcmlwdG9yczogRGVzY3JpcHRvcltdID0gW11cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBkYXRhUGFja2FnZS5yZXNvdXJjZXMpIHtcbiAgICByZXNvdXJjZURlc2NyaXB0b3JzLnB1c2goXG4gICAgICBhd2FpdCBzYXZlUmVzb3VyY2VGaWxlcyhyZXNvdXJjZSwge1xuICAgICAgICBiYXNlcGF0aCxcbiAgICAgICAgd2l0aFJlbW90ZSxcbiAgICAgICAgc2F2ZUZpbGU6IGFzeW5jIG9wdGlvbnMgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IGxvYWRGaWxlU3RyZWFtKG9wdGlvbnMubm9ybWFsaXplZFBhdGgpXG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgc3RyZWFtVG9CdWZmZXIoc3RyZWFtKVxuICAgICAgICAgIGZpbGVzW29wdGlvbnMuZGVub3JtYWxpemVkUGF0aF0gPSBidWZmZXJcblxuICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlbm9ybWFsaXplZFBhdGhcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGRlc2NyaXB0b3IgPSB7XG4gICAgLi4uY29udmVydFBhY2thZ2VUb0Rlc2NyaXB0b3IoZGF0YVBhY2thZ2UsIHsgYmFzZXBhdGggfSksXG4gICAgcmVzb3VyY2VzOiByZXNvdXJjZURlc2NyaXB0b3JzLFxuICB9XG5cbiAgZmlsZXNbXCJkYXRhcGFja2FnZS5qc29uXCJdID0gQnVmZmVyLmZyb20oc3RyaW5naWZ5RGVzY3JpcHRvcihkZXNjcmlwdG9yKSlcblxuICBjb25zdCB6aXBEYXRhID0gYXdhaXQgbmV3IFByb21pc2U8VWludDhBcnJheT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcChmaWxlcywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycilcbiAgICAgIGVsc2UgcmVzb2x2ZShkYXRhKVxuICAgIH0pXG4gIH0pXG5cbiAgYXdhaXQgd3JpdGVGaWxlKGFyY2hpdmVQYXRoLCB6aXBEYXRhKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihzdHJlYW06IFJlYWRhYmxlKSB7XG4gIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaChjaHVuaylcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpXG59XG4iXX0=