UNPKG

@dpkit/zip

Version:

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

47 lines 6.75 kB
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=